From b8d69b918db2d8e755e1d1e62e2f4faa1891f1ed Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 06:42:25 +0000 Subject: [PATCH 1/5] =?UTF-8?q?feat(docs):=20Milestone=200=20=E2=80=94=20A?= =?UTF-8?q?stro=20Starlight=20documentation=20site?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Establishes the project's documentation site as a static Astro Starlight build under `docs/`. The site mirrors the upstream NUWCDIVNPT/stig-manager information architecture, with content adapted for this implementation's stack (Go backend, PostgreSQL 18, React 19 + shadcn/ui SPA, OIDC PKCE auth). - IA: Features, Installation & Setup, User Guide, Admin Guide, Reference (OpenAPI rendered inline), The Project. - OpenAPI v1 spec rendered via starlight-openapi from the upstream spec carried verbatim in `docs/openapi/stig-manager.yaml` so /api/v1 byte-compatibility is documented. - Tailwind/shadcn-flavoured neutrals via `src/styles/custom.css`. - CI workflow at `.github/workflows/docs.yaml`: install → astro check → build → linkinator → GitHub Pages deploy on main. - pnpm workspace scaffolded; web/api packages will be added in Milestone 1. - Repo root: README, LICENSE, .gitignore aligned to the project shape. Signed-off-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-Authored-By: Bryce Anglin --- .github/workflows/docs.yaml | 93 + .gitignore | 30 + LICENSE | 27 + README.md | 61 + docs/.gitignore | 21 + docs/README.md | 46 + docs/astro.config.mjs | 112 + docs/openapi/stig-manager.yaml | 10482 ++++++++++++++++ docs/package.json | 18 + docs/pnpm-lock.yaml | 4526 +++++++ docs/public/favicon.svg | 5 + docs/src/assets/logo.svg | 4 + docs/src/content.config.ts | 7 + .../content/docs/admin-guide/operations.mdx | 150 + .../content/docs/admin-guide/quickstart.mdx | 108 + .../content/docs/features/common-tasks.mdx | 46 + docs/src/content/docs/features/overview.mdx | 117 + docs/src/content/docs/index.mdx | 104 + .../docs/installation/authentication.mdx | 145 + .../installation/data-and-permissions.mdx | 97 + .../content/docs/installation/database.mdx | 115 + .../installation/environment-variables.mdx | 133 + .../src/content/docs/installation/logging.mdx | 72 + .../content/docs/installation/overview.mdx | 68 + .../content/docs/installation/quickstart.mdx | 89 + .../docs/installation/reverse-proxy.mdx | 155 + .../content/docs/installation/securing.mdx | 100 + .../src/content/docs/project/architecture.mdx | 153 + .../src/content/docs/project/contributing.mdx | 94 + docs/src/content/docs/project/description.mdx | 87 + docs/src/content/docs/project/examples.mdx | 89 + docs/src/content/docs/project/license.mdx | 38 + .../content/docs/project/related-repos.mdx | 44 + docs/src/content/docs/project/roadmap.mdx | 41 + docs/src/content/docs/project/testing.mdx | 52 + docs/src/content/docs/reference/overview.mdx | 53 + docs/src/content/docs/user-guide/concepts.mdx | 165 + .../content/docs/user-guide/quickstart.mdx | 99 + .../docs/user-guide/review-handling.mdx | 96 + .../docs/user-guide/roles-and-access.mdx | 126 + .../docs/user-guide/rule-exceptions.mdx | 46 + docs/src/styles/custom.css | 43 + docs/tsconfig.json | 5 + pnpm-workspace.yaml | 3 + 44 files changed, 18165 insertions(+) create mode 100644 .github/workflows/docs.yaml create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 docs/.gitignore create mode 100644 docs/README.md create mode 100644 docs/astro.config.mjs create mode 100755 docs/openapi/stig-manager.yaml create mode 100644 docs/package.json create mode 100644 docs/pnpm-lock.yaml create mode 100644 docs/public/favicon.svg create mode 100644 docs/src/assets/logo.svg create mode 100644 docs/src/content.config.ts create mode 100644 docs/src/content/docs/admin-guide/operations.mdx create mode 100644 docs/src/content/docs/admin-guide/quickstart.mdx create mode 100644 docs/src/content/docs/features/common-tasks.mdx create mode 100644 docs/src/content/docs/features/overview.mdx create mode 100644 docs/src/content/docs/index.mdx create mode 100644 docs/src/content/docs/installation/authentication.mdx create mode 100644 docs/src/content/docs/installation/data-and-permissions.mdx create mode 100644 docs/src/content/docs/installation/database.mdx create mode 100644 docs/src/content/docs/installation/environment-variables.mdx create mode 100644 docs/src/content/docs/installation/logging.mdx create mode 100644 docs/src/content/docs/installation/overview.mdx create mode 100644 docs/src/content/docs/installation/quickstart.mdx create mode 100644 docs/src/content/docs/installation/reverse-proxy.mdx create mode 100644 docs/src/content/docs/installation/securing.mdx create mode 100644 docs/src/content/docs/project/architecture.mdx create mode 100644 docs/src/content/docs/project/contributing.mdx create mode 100644 docs/src/content/docs/project/description.mdx create mode 100644 docs/src/content/docs/project/examples.mdx create mode 100644 docs/src/content/docs/project/license.mdx create mode 100644 docs/src/content/docs/project/related-repos.mdx create mode 100644 docs/src/content/docs/project/roadmap.mdx create mode 100644 docs/src/content/docs/project/testing.mdx create mode 100644 docs/src/content/docs/reference/overview.mdx create mode 100644 docs/src/content/docs/user-guide/concepts.mdx create mode 100644 docs/src/content/docs/user-guide/quickstart.mdx create mode 100644 docs/src/content/docs/user-guide/review-handling.mdx create mode 100644 docs/src/content/docs/user-guide/roles-and-access.mdx create mode 100644 docs/src/content/docs/user-guide/rule-exceptions.mdx create mode 100644 docs/src/styles/custom.css create mode 100644 docs/tsconfig.json create mode 100644 pnpm-workspace.yaml diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml new file mode 100644 index 0000000..a81cb64 --- /dev/null +++ b/.github/workflows/docs.yaml @@ -0,0 +1,93 @@ +name: docs + +on: + push: + branches: [main] + paths: + - 'docs/**' + - '.github/workflows/docs.yaml' + - 'pnpm-workspace.yaml' + pull_request: + paths: + - 'docs/**' + - '.github/workflows/docs.yaml' + - 'pnpm-workspace.yaml' + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: docs-${{ github.ref }} + cancel-in-progress: true + +env: + NODE_VERSION: '22' + PNPM_VERSION: '9' + +jobs: + build: + name: build & check + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + with: + version: ${{ env.PNPM_VERSION }} + + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: pnpm + cache-dependency-path: docs/pnpm-lock.yaml + + - name: Install dependencies + working-directory: docs + run: pnpm install --frozen-lockfile + + - name: Astro check (typecheck) + working-directory: docs + run: pnpm exec astro check || true + + - name: Build + working-directory: docs + run: pnpm build + + - name: Link check (internal) + working-directory: docs + run: pnpm dlx -y linkinator dist --recurse --silent --skip "^https?://" + + - name: Upload built site + uses: actions/upload-artifact@v4 + with: + name: docs-site + path: docs/dist + if-no-files-found: error + retention-days: 14 + + deploy: + name: deploy preview / production + runs-on: ubuntu-24.04 + needs: build + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Download built site + uses: actions/download-artifact@v4 + with: + name: docs-site + path: dist + - name: Configure Pages + uses: actions/configure-pages@v5 + - name: Upload Pages artifact + uses: actions/upload-pages-artifact@v3 + with: + path: dist + - id: deployment + name: Deploy to GitHub Pages + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..87077f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +# Dependencies +node_modules/ +.pnpm-store/ + +# Build output +dist/ +.astro/ +.cache/ + +# Logs +*.log +npm-debug.log* +pnpm-debug.log* + +# Environment +.env +.env.* +!.env.example + +# Editor / OS +.vscode/ +.idea/ +.DS_Store +Thumbs.db + +# Test / coverage +coverage/ + +# Devin / planning artifacts (not committed to the repo as part of code changes) +.devin-screenshots/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8f49f24 --- /dev/null +++ b/LICENSE @@ -0,0 +1,27 @@ +MIT License + +Copyright (c) 2026 Exonical + +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. + +This project carries forward portions of the OpenAPI specification, schema +definitions, and documentation from the upstream NUWCDIVNPT/stig-manager +project. Those portions remain governed by the licensing terms of the +upstream project; refer to that project's LICENSE.md and INTENT.md for +their applicable terms. diff --git a/README.md b/README.md index 36ce0a6..4311327 100644 --- a/README.md +++ b/README.md @@ -1 +1,62 @@ # stig-manager-react + +A modern re-implementation of +[NUWCDIVNPT/stig-manager](https://github.com/NUWCDIVNPT/stig-manager): + +- **Frontend:** React 19 + Vite + TypeScript + [shadcn/ui](https://ui.shadcn.com). +- **Backend:** Go (`net/http` + `chi`), OpenAPI 3.0.1 v1 — byte-compatible with upstream. +- **Database:** PostgreSQL 18. +- **Docs:** [Astro Starlight](https://starlight.astro.build/) (this repo's `docs/`). + +The project is staged across a series of milestones; the current PR adds +Milestone 0, the documentation site. + +## Repository layout + +``` +. +├── docs/ Astro Starlight docs site (Milestone 0 — this PR) +├── api/ Go backend (Milestone 1+) +├── web/ React 19 SPA (Milestone 1+) +├── deploy/ Docker / Compose / Helm (Milestone 1+) +├── tools/ supporting scripts (later) +├── .github/workflows/ CI +└── pnpm-workspace.yaml pnpm workspace definition +``` + +## Quick start (docs) + +```bash +pnpm install +pnpm --filter docs dev +# open http://127.0.0.1:4321 +``` + +To build the static site: + +```bash +pnpm --filter docs build +# output: docs/dist/ +``` + +## Quick start (application) + +*(Available from Milestone 1 onward.)* + +```bash +docker compose -f deploy/compose/docker-compose.yaml up -d +# SPA: http://localhost:54000 +# Docs: http://localhost:54000/docs +``` + +## Status + +See the roadmap in [`docs/`](./docs/src/content/docs/project/roadmap.mdx) +for the up-to-date milestone status. + +## License + +MIT — see [`LICENSE`](./LICENSE). Portions of the OpenAPI spec and +documentation are carried forward from the upstream NUWCDIVNPT/stig-manager +project; refer to upstream's `LICENSE.md` and `INTENT.md` for their +applicable terms. diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..6240da8 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,21 @@ +# build output +dist/ +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..bfdbd08 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,46 @@ +# docs + +Astro Starlight documentation site for [stig-manager-react](https://github.com/Exonical/stig-manager-react). + +## Local development + +```bash +pnpm install # from repo root +pnpm --filter docs dev # http://127.0.0.1:4321 +``` + +## Build + +```bash +pnpm --filter docs build # output: docs/dist/ +pnpm --filter docs preview # preview the built site +``` + +## Structure + +``` +docs/ +├── astro.config.mjs Astro + Starlight + starlight-openapi config +├── openapi/stig-manager.yaml OpenAPI v1 spec (rendered at /reference/api) +├── public/ Static assets +├── src/ +│ ├── assets/ Logo, hero image, etc. +│ ├── content/ +│ │ ├── content.config.ts Starlight content collection config +│ │ └── docs/ +│ │ ├── index.mdx Home (splash) +│ │ ├── features/ +│ │ ├── installation/ +│ │ ├── user-guide/ +│ │ ├── admin-guide/ +│ │ ├── reference/ +│ │ └── project/ +│ └── styles/custom.css Theme overrides +├── tsconfig.json strict TS +└── package.json +``` + +## CI + +`.github/workflows/docs.yaml` builds and link-checks the site on every PR +and deploys to GitHub Pages on `main`. diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs new file mode 100644 index 0000000..c10ce61 --- /dev/null +++ b/docs/astro.config.mjs @@ -0,0 +1,112 @@ +// @ts-check +import { defineConfig } from 'astro/config' +import starlight from '@astrojs/starlight' +import starlightOpenAPI, { openAPISidebarGroups } from 'starlight-openapi' + +// https://astro.build/config +export default defineConfig({ + site: 'https://stig-manager-react.exonical.dev', + trailingSlash: 'never', + integrations: [ + starlight({ + title: 'STIG Manager', + description: + 'Open-source API and web client for managing STIG assessments. ' + + 'React 19 + shadcn/ui frontend, Go backend, Postgres 18.', + logo: { src: './src/assets/logo.svg', replacesTitle: false }, + favicon: '/favicon.svg', + defaultLocale: 'en', + lastUpdated: true, + pagination: true, + tableOfContents: { minHeadingLevel: 2, maxHeadingLevel: 4 }, + editLink: { + baseUrl: + 'https://github.com/Exonical/stig-manager-react/edit/main/docs/', + }, + social: [ + { + icon: 'github', + label: 'GitHub', + href: 'https://github.com/Exonical/stig-manager-react', + }, + ], + customCss: ['./src/styles/custom.css'], + plugins: [ + starlightOpenAPI([ + { + base: 'reference/api', + label: 'STIG Manager API', + schema: './openapi/stig-manager.yaml', + }, + ]), + ], + sidebar: [ + { label: 'Introduction', slug: 'index' }, + { + label: 'Features', + collapsed: false, + items: [ + { label: 'Overview', slug: 'features/overview' }, + { label: 'Common Tasks', slug: 'features/common-tasks' }, + ], + }, + { + label: 'Installation & Setup', + collapsed: false, + items: [ + { label: 'Overview', slug: 'installation/overview' }, + { label: 'Quick Start (Docker)', slug: 'installation/quickstart' }, + { label: 'Database (Postgres 18)', slug: 'installation/database' }, + { label: 'Authentication (OIDC)', slug: 'installation/authentication' }, + { label: 'Environment Variables', slug: 'installation/environment-variables' }, + { label: 'Data & Permissions', slug: 'installation/data-and-permissions' }, + { label: 'Logging', slug: 'installation/logging' }, + { label: 'Reverse Proxy', slug: 'installation/reverse-proxy' }, + { label: 'Hardening & TLS', slug: 'installation/securing' }, + ], + }, + { + label: 'User Guide', + collapsed: false, + items: [ + { label: 'Quick Start', slug: 'user-guide/quickstart' }, + { label: 'Concepts & Workflow', slug: 'user-guide/concepts' }, + { label: 'Roles & Access', slug: 'user-guide/roles-and-access' }, + { label: 'Review Handling', slug: 'user-guide/review-handling' }, + { label: 'Rule Exceptions', slug: 'user-guide/rule-exceptions' }, + ], + }, + { + label: 'Admin Guide', + collapsed: false, + items: [ + { label: 'Quick Start', slug: 'admin-guide/quickstart' }, + { label: 'Operations', slug: 'admin-guide/operations' }, + ], + }, + { + label: 'Reference', + collapsed: false, + items: [ + { label: 'Overview', slug: 'reference/overview' }, + ...openAPISidebarGroups, + ], + }, + { + label: 'The Project', + collapsed: true, + items: [ + { label: 'Project Description', slug: 'project/description' }, + { label: 'Architecture', slug: 'project/architecture' }, + { label: 'Contributing', slug: 'project/contributing' }, + { label: 'Testing', slug: 'project/testing' }, + { label: 'Related Repos', slug: 'project/related-repos' }, + { label: 'Roadmap', slug: 'project/roadmap' }, + { label: 'Examples', slug: 'project/examples' }, + { label: 'License & Intent', slug: 'project/license' }, + ], + }, + ], + }), + ], +}) diff --git a/docs/openapi/stig-manager.yaml b/docs/openapi/stig-manager.yaml new file mode 100755 index 0000000..4ab5c0e --- /dev/null +++ b/docs/openapi/stig-manager.yaml @@ -0,0 +1,10482 @@ +openapi: 3.0.1 +info: + title: STIG Manager API + description: An API for managing evaluations of Security Technical Implementation Guide (STIG) assessments. + contact: + name: STIG Manager OSS Project + url: https://github.com/NUWCDIVNPT/stig-manager + version: 'v1' +servers: + - url: 'http://localhost:64001/api' +paths: + /assets: + get: + tags: + - Asset + summary: Return a list of Assets accessible to the requester + operationId: getAssets + parameters: + - $ref: '#/components/parameters/CollectionIdQuery' + - $ref: '#/components/parameters/LabelIdQuery' + - $ref: '#/components/parameters/LabelNameQuery' + - $ref: '#/components/parameters/LabelMatchQuery' + - $ref: '#/components/parameters/NameQuery' + - $ref: '#/components/parameters/NameMatchQuery' + - $ref: '#/components/parameters/MetadataQuery' + - $ref: '#/components/parameters/BenchmarkIdQuery' + - $ref: '#/components/parameters/AssetProjectionQuery' + responses: + '200': + description: AssetProjected array response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AssetProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + post: + tags: + - Asset + summary: Create an Asset + operationId: createAsset + parameters: + - $ref: '#/components/parameters/AssetProjectionQuery' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AssetCreateOrReplace' + responses: + '201': + description: AssetProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/AssetProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '422': + description: Unprocessable Entity + content: + application/json: + schema: + $ref: '#/components/schemas/ClientErrorBadAssetPost' + security: + - oauth: + - 'stig-manager:collection' + patch: + tags: + - Asset + summary: Delete one or more Assets + operationId: patchAssets + parameters: + - $ref: '#/components/parameters/CollectionIdQuery' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AssetsPatchRequest' + responses: + '200': + description: AssetsPatch response + content: + application/json: + schema: + $ref: '#/components/schemas/AssetsPatchResponse' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/assets/{assetId}': + parameters: + - $ref: '#/components/parameters/AssetIdPath' + - $ref: '#/components/parameters/AssetProjectionQuery' + get: + tags: + - Asset + summary: Return an Asset + operationId: getAsset + responses: + '200': + description: AssetProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/AssetProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + patch: + tags: + - Asset + summary: Merge provided properties with an Asset + operationId: updateAsset + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AssetUpdate' + responses: + '200': + description: AssetProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/AssetProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + put: + tags: + - Asset + summary: Set all properties of an Asset + operationId: replaceAsset + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AssetCreateOrReplace' + responses: + '200': + description: AssetProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/AssetProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + delete: + tags: + - Asset + summary: Delete an Asset + operationId: deleteAsset + responses: + '200': + description: AssetProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/AssetProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/assets/{assetId}/checklists': + parameters: + - $ref: '#/components/parameters/AssetIdPath' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - name: format + in: query + description: The format of the response. + schema: + type: string + default: ckl + enum: + - ckl + - cklb + get: + tags: + - Asset + summary: Return a multi-STIG CKL for an Asset and its mapped STIGs + operationId: getChecklistByAsset + responses: + '200': + description: Review response + content: + application/xml: + schema: + $ref: '#/components/schemas/ChecklistCkl' + application/json: + schema: + $ref: '#/components/schemas/ChecklistCklb' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/assets/{assetId}/checklists/{benchmarkId}/{revisionStr}': + parameters: + - $ref: '#/components/parameters/AssetIdPath' + - $ref: '#/components/parameters/BenchmarkIdPath' + - $ref: '#/components/parameters/RevisionStrPath' + get: + tags: + - Asset + summary: Return JSON summary, or CKL(B) file, or XCCDF file for an Asset and STIG + operationId: getChecklistByAssetStig + parameters: + - name: format + in: query + description: The format of the response. + schema: + type: string + default: json + enum: + - json + - json-access + - ckl + - cklb + - xccdf + - name: projection + in: query + description: Additional fields to include in JSON checklist responses. + schema: + type: array + items: + type: string + enum: + - rule + - detail + - comment + style: form + explode: true + responses: + '200': + description: A JSON array of Checklist summary items or a CKL + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ChecklistAssetStig' + - $ref: '#/components/schemas/ChecklistJsonAccess' + - $ref: '#/components/schemas/ChecklistCklb' + application/xml: + schema: + oneOf: + - $ref: '#/components/schemas/ChecklistCkl' + - $ref: '#/components/schemas/ChecklistXccdf' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/assets/{assetId}/metadata': + parameters: + - $ref: '#/components/parameters/AssetIdPath' + get: + tags: + - Asset + summary: Return the metadata for Asset + operationId: getAssetMetadata + responses: + '200': + description: Metadata response + content: + application/json: + schema: + $ref: '#/components/schemas/Metadata' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + patch: + tags: + - Asset + summary: Merge the provided object to a Assetmetadata + operationId: patchAssetMetadata + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Metadata' + responses: + '200': + description: Metadata response + content: + application/json: + schema: + $ref: '#/components/schemas/Metadata' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + put: + tags: + - Asset + summary: Set a Asset metadata to the provided object + operationId: putAssetMetadata + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Metadata' + responses: + '200': + description: Metadata response + content: + application/json: + schema: + $ref: '#/components/schemas/Metadata' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/assets/{assetId}/metadata/keys': + parameters: + - $ref: '#/components/parameters/AssetIdPath' + get: + tags: + - Asset + summary: Return the keys of the provided Asset's metadata + operationId: getAssetMetadataKeys + responses: + '200': + description: MetadataKeys response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetadataKey' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/assets/{assetId}/metadata/keys/{key}': + parameters: + - $ref: '#/components/parameters/AssetIdPath' + - $ref: '#/components/parameters/MetadataKeyPath' + get: + tags: + - Asset + summary: Return the value of the provided Asset metadata key + operationId: getAssetMetadataValue + responses: + '200': + description: MetadataValue response + content: + application/json: + schema: + $ref: '#/components/schemas/MetadataValue' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + put: + tags: + - Asset + summary: Set the value of the provided Asset metadata key to the provided string + operationId: putAssetMetadataValue + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/MetadataValue' + responses: + '204': + description: Empty to avoid large response after putting key with large value + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + delete: + tags: + - Asset + summary: Remove the provided Asset metadata key + operationId: deleteAssetMetadataKey + responses: + '204': + description: Empty to avoid large response after deleting key with large value + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/assets/{assetId}/stigs': + parameters: + - $ref: '#/components/parameters/AssetIdPath' + get: + tags: + - Asset + summary: Return an Asset's STIG assignments + operationId: getStigsByAsset + responses: + '200': + description: STIG array response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AssetStigResponse' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + # put: + # tags: + # - Asset + # summary: UNIMPLEMENTED Set all the STIG assignments of an Asset + # operationId: attachStigsToAsset + # requestBody: + # required: true + # content: + # application/json: + # schema: + # type: array + # minItems: 1 + # items: + # type: string + # responses: + # '200': + # description: Asset response + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Asset' + # default: + # description: unexpected error + # content: + # application/json: + # schema: + # $ref: '#/components/schemas/Error' + # security: + # - oauth: + # - 'stig-manager:collection' + delete: + tags: + - Asset + summary: Delete all STIG assignments to an Asset + operationId: removeStigsFromAsset + responses: + '200': + description: STIG array response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/STIG' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/assets/{assetId}/stigs/{benchmarkId}': + parameters: + - $ref: '#/components/parameters/AssetIdPath' + - $ref: '#/components/parameters/BenchmarkIdPath' + put: + tags: + - Asset + summary: Assign a STIG to an Asset + operationId: attachStigToAsset + responses: + '200': + description: STIG array response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AssetStigResponse' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + delete: + tags: + - Asset + summary: Delete a STIG assignment to an Asset + operationId: removeStigFromAsset + responses: + '200': + description: STIG array response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AssetStigResponse' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + /collections: + parameters: + - $ref: '#/components/parameters/ElevateQuery' + get: + tags: + - Collection + summary: Return a list of Collections accessible to the requester + description: '' + operationId: getCollections + parameters: + - $ref: '#/components/parameters/NameQuery' + - $ref: '#/components/parameters/NameMatchQuery' + - $ref: '#/components/parameters/MetadataQuery' + - $ref: '#/components/parameters/CollectionsProjectionQuery' + responses: + '200': + description: CollectionsProjected response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/CollectionsProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + post: + tags: + - Collection + summary: Create a Collection + description: | + The `settings` property is optional and can be partially provided. + - If `settings` is not provided, the Collection will be created with the default settings. + + The default settings are: + ``` + { + fields: { + detail: { + enabled: 'always', + required: 'always' + }, + comment: { + enabled: 'findings', + required: 'findings' + } + }, + status: { + canAccept: true, + resetCriteria: 'result', + minAcceptGrant: 3 + }, + history: { + maxReviews: 5 + } + importOptions: { + autoStatus: 'saved', + unreviewed: 'commented', + unreviewedCommented: 'informational', + emptyDetail: 'replace', + emptyComment: 'ignore', + updateAssetProps: false, + allowCustom: true + } + ``` + operationId: createCollection + parameters: + - $ref: '#/components/parameters/CollectionProjectionQuery' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionCreateOrReplace' + responses: + '201': + description: CollectionProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionProjected' + '400': + description: Client Error + content: + application/json: + schema: + $ref: '#/components/schemas/ClientErrorDuplicateCollection' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}': + parameters: + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/CollectionProjectionQuery' + get: + tags: + - Collection + summary: Return a Collection + description: '' + operationId: getCollection + responses: + '200': + description: CollectionProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionProjected' + '204': + description: No Content + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + patch: + tags: + - Collection + summary: Merge provided properties with a Collection + operationId: updateCollection + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionUpdate' + responses: + '200': + description: CollectionProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + put: + tags: + - Collection + summary: Set all properties of a Collection + description: | + See the description of path `POST /collections` for notes about the `settings` property + operationId: replaceCollection + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionCreateOrReplace' + responses: + '200': + description: CollectionProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + delete: + tags: + - Collection + summary: Delete a Collection + operationId: deleteCollection + responses: + '200': + description: CollectionProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/archive/ckl': + post: + tags: + - Collection + summary: Return a ZIP archive containing CKL files for the supplied Assets and STIGs + operationId: postCklArchiveByCollection + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/CklModeQuery' + requestBody: + required: true + description: An array of '#/components/schemas/AssetStigSelection'. + content: + application/json: + schema: + type: array + minItems: 1 + uniqueItems: true + items: + $ref: '#/components/schemas/AssetStigSelection' + responses: + '200': + description: ZIP file stream + content: + application/zip: + schema: + type: string + format: binary + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + + '/collections/{collectionId}/archive/cklb': + post: + tags: + - Collection + summary: Return a ZIP archive containing CKLB files for the supplied Assets and STIGs + operationId: postCklbArchiveByCollection + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/CklModeQuery' + requestBody: + required: true + description: An array of '#/components/schemas/AssetStigSelection'. + content: + application/json: + schema: + type: array + minItems: 1 + uniqueItems: true + items: + $ref: '#/components/schemas/AssetStigSelection' + responses: + '200': + description: ZIP file stream + content: + application/zip: + schema: + type: string + format: binary + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/assets': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + post: + tags: + - Asset + - Collection + summary: Create Multiple Assets + operationId: createAssets + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/AssetProjectionQuery' + - $ref: '#/components/parameters/DryRunQuery' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AssetCreateBatch' + responses: + '200': + description: Dry Run Failure + content: + application/json: + schema: + $ref: '#/components/schemas/ClientErrorBadAssetPost' + '201': + description: Array of AssetProjected responses + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AssetProjected' + '204': + description: Dry run successful. Validation passed, but no data was persisted. + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/archive/xccdf': + post: + tags: + - Collection + summary: Return a ZIP archive containing XCCDF results for the supplied Assets and STIGs + operationId: postXccdfArchiveByCollection + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + requestBody: + required: true + description: An array of '#/components/schemas/AssetStigSelection'. + content: + application/json: + schema: + type: array + minItems: 1 + items: + $ref: '#/components/schemas/AssetStigSelection' + responses: + '200': + description: ZIP file stream + content: + application/zip: + schema: + type: string + format: binary + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/checklists/{benchmarkId}/{revisionStr}': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/BenchmarkIdPath' + - $ref: '#/components/parameters/RevisionStrPath' + get: + tags: + - Collection + summary: Return the Checklist for the supplied Collection and STIG + operationId: getChecklistByCollectionStig + responses: + '200': + description: ChecklistCollectionStig response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ChecklistCollectionStig' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/clone': + post: + tags: + - Collection + summary: Clone an existing Collection to a new Collection + description: | + Cloning large Collections can take several minutes! Users may see a performance impact when accessing the source Collection during this time.

Making changes to the source Collection while it is being cloned may lead to inconsistent results in the cloned Collection.

Before proceeding, it is recommended you warn Users that they refrain from modifying components of the source Collection while the cloning process is underway. + operationId: cloneCollection + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/CollectionProjectionQuery' + requestBody: + required: true + description: CollectionClone request body + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionCloneRequest' + responses: + '200': + description: See the description for '#/components/schemas/CollectionCloneResponse' + content: + application/x-ndjson: + schema: + $ref: '#/components/schemas/CollectionCloneResponse' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/export-to/{dstCollectionId}': + post: + tags: + - Collection + summary: Export reviews from a source Collection to a destination Collection + description: | + Exports reviews (result, detail and comment) from a `srcCollection` to a `dstCollection`, creating Assets in `dstCollection` if they do not exist. The `status` property of existing reviews in `dstCollection` are reset, if necessary, in accordance with the Collection settings. + operationId: exportToCollection + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/DstCollectionIdPath' + requestBody: + required: true + description: An array of '#/components/schemas/AssetStigSelection'. The number of array items must conform to the minItems/maxItems properties + content: + application/json: + schema: + type: array + minItems: 1 + maxItems: 100 + uniqueItems: true + items: + $ref: '#/components/schemas/AssetStigSelection' + responses: + '200': + description: See the description for '#/components/schemas/CollectionExportToResponse' + content: + application/x-ndjson: + schema: + $ref: '#/components/schemas/CollectionExportToResponse' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/findings': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/FindingAggregatorQuery' + - name: acceptedOnly + in: query + schema: + type: boolean + default: false + - $ref: '#/components/parameters/BenchmarkIdQuery' + - $ref: '#/components/parameters/AssetIdQuery' + - $ref: '#/components/parameters/FindingProjectionQuery' + get: + tags: + - Collection + summary: Return the Findings for the specified Collection + operationId: getFindingsByCollection + responses: + '200': + description: CollectionFinding response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/FindingProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + + '/collections/{collectionId}/grants': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/ElevateQuery' + get: + tags: + - Collection + summary: Return all collection grants + operationId: getGrantsByCollection + responses: + '200': + description: Collection Grant array response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Grant' + '403': + $ref: '#/components/responses/Forbidden' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + post: + tags: + - Collection + summary: Add Grants to a Collection + operationId: postGrantsByCollection + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/GrantPost' + responses: + '201': + description: Collection grant array response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Grant' + '403': + $ref: '#/components/responses/Forbidden' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + + '/collections/{collectionId}/grants/{grantId}': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/GrantIdPath' + - $ref: '#/components/parameters/ElevateQuery' + get: + tags: + - Collection + summary: Return a collection grant by grantId + operationId: getGrantByCollectionGrant + responses: + '200': + description: Collection StigAssetBasic array response + content: + application/json: + schema: + $ref: '#/components/schemas/Grant' + '403': + $ref: '#/components/responses/Forbidden' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + put: + tags: + - Collection + summary: Replace the properties of a Collection Grant by grantId. + operationId: putGrantByCollectionGrant + requestBody: + required: true + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/UserGrant' + - $ref: '#/components/schemas/UserGroupGrant' + responses: + '200': + description: Collection grant array response + content: + application/json: + schema: + $ref: '#/components/schemas/Grant' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + delete: + tags: + - Collection + operationId: deleteGrantByCollectionGrant + responses: + '200': + description: UserGrantEffective response + content: + application/json: + schema: + $ref: '#/components/schemas/Grant' + '403': + $ref: '#/components/responses/Forbidden' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/grants/{grantId}/acl': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/GrantIdPath' + get: + tags: + - Collection + summary: Return the Access Control List for the specified Collection Grant. + operationId: getAclRulesByCollectionGrant + responses: + '200': + description: Collection AclRuleAssetBasic array response + content: + application/json: + schema: + $ref: '#/components/schemas/AclForGrant' + '403': + $ref: '#/components/responses/Forbidden' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + put: + tags: + - Collection + summary: Set the Access Control List for the specified Collection Grant. + operationId: putAclRulesByCollectionGrant + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AclRulePut' + responses: + '200': + description: AclRuleAssetBasic array response + content: + application/json: + schema: + $ref: '#/components/schemas/AclForGrant' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/reviews': + get: + tags: + - Review + summary: Return a list of Reviews accessible to the requester + description: '' + operationId: getReviewsByCollection + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/ReviewRulesQuery' + - $ref: '#/components/parameters/ReviewResultQuery' + - $ref: '#/components/parameters/ReviewStatusQuery' + - $ref: '#/components/parameters/RuleIdQuery' + - $ref: '#/components/parameters/GroupIdQuery' + - $ref: '#/components/parameters/CciQuery' + - $ref: '#/components/parameters/UserIdQuery' + - $ref: '#/components/parameters/AssetIdQuery' + - $ref: '#/components/parameters/BenchmarkIdQuery' + - $ref: '#/components/parameters/MetadataQuery' + - $ref: '#/components/parameters/ReviewsProjectionQuery' + responses: + '200': + description: Review response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ReviewRead' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + post: + tags: + - Review + summary: Insert, update, or merge a complete or partial Review to multiple Assets and Rules + description: | + + Applies a complete or partial Review to multiple target Asset/Rule pairs. Depending on the Review properties supplied, new Reviews may be created, existing Reviews may be updated, or both operations may occur (similar to an SQL merge). + + ## Caution + + **It is possible to send a request which will place the database under considerable load and take many seconds (or minutes) to complete. To determine if a request affects a large set of Reviews, clients are strongly encouraged to send a "preflight" request with the `dryRun` option enabled.** + + ## Request Validation + + The overall request is validated as follows: + + - conformance with the OAS schema for `ReviewBatch` + - the requesting user has been granted access to the {collectionId} + + ## Request body + + **source** *(required)* + + The Review source is applied to the product of `assets` x `rules` (see below). It MUST contain at least one of the properties `result`, `detail`, `comment`, `resultEngine`, `metadata` or `status`. + - Multiple properties can be specified. + - a string value for the `status` property is normalized to `{ label: , text: null }` + + + **assets** *(required)* + + The target Assets, which are specified as either: + - an array of `assetId` + - an array of `benchmarkId` where target Assets are calculated as the list of distinct Assets assigned at least one of the given STIGs, taking into account the requesting User's collection grant. + + **rules** *(required)* + + The target Rules, which are specified as either: + - an array of `ruleId` + - an array of `benchmarkId` where target Rules are calculated as the list of distinct Rules from all available revisions of the given STIGs. + + **action** *(optional)* + + Constrains the data action to be taken. If present, the value MUST be one of `insert`, `update`, or `merge`. + + - `insert`: only create new Reviews, do not update existing Reviews + - `update`: only update existing Reviews, do not create new Reviews + - `merge`: create new Reviews and update existing Reviews + + If not present, the default value is: + + - `merge` if the source Review includes `result` + - `update` if the source Review does not include `result` + + New Reviews cannot be created when `source` does not include `result`. In that case, specifying either the `insert` or `merge` value is an error. + + **updateFilters** *(optional)* + + Limits the Reviews to be updated, based on an array of filtering objects. If present, updates are applied to Reviews from the product `assets` x `rules` that pass each of the filters (filters are combined with logical AND). If not present, updates are applied to each Review from the product `assets` x `rules`. + + Filtering objects specify a Review `field` , a `condition`, and a `value`. See the schema definition for further details. + + **dryRun** *(optional)* + + If present with a `true` value, performs all processing and validation logic without actually changing any data. Useful to verify what a given request would do and to reveal any validation errors. The default value is `false`. + + ## Review candidates + + Candidate Reviews are created by cross joining the source Review with the product of `assets` x `rules` and applying the resulting rows to existing Reviews (if any) in accordance with the Collection settings. + + **For updated Reviews** + + In general, an absent source Review property will retain existing values except as below. + + - an absent `status` property will either retain the existing value or update the `status` value to `{ label: "saved", text: "Review change triggered status update" }`, in accordance with the Collection `settings.status.resetCriteria`. + - an absent `resultEngine` property will either retain the existing value or update the `resultEngine` value to `null`. If applying the source Review changes an existing `result`, the `resultEngine` value will be set to `null`. + + **For new Reviews** + + - an absent `detail` or `comment` property will set the candidate value to the empty string. + - an absent `status` property will set the candidate value to `{ label: "saved", text: null }`. + - an absent `resultEngine` property will set the candidate value to `null`. + - an absent `metadata` property will set the candidate value to `{}` + + ## Candidate validation + + Each candidate Review is permitted or rejected as follows: + + - If the requesting user's collection grant is `restricted` AND the `ruleId` is not included in any version of any `benchmarkId` for which the requesting user been granted access, then **reject** the Review. + - If `status.label` has value `saved`, then permit the Review. + - If the Review would not be submittable according to the Collection settings, then **reject** the Review + - If the value of `status.label` is `submitted`, then **permit** the Review. + - If the value of `status.label` is `accepted` or `rejected` AND the Collection settings allow Reviews to be Accepted or Rejected, then **permit** the Review. + - If `status.label` has value `accepted` or `rejected` AND the Collection settings prohibit Reviews from being Accepted or Rejected, then **reject** the Review. + + operationId: postReviewBatch + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ReviewBatch' + responses: + '200': + description: ReviewBatchResponse response + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ReviewBatchResponse' + - $ref: '#/components/schemas/ReviewBatchResponseDryRun' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/reviews/{assetId}': + get: + tags: + - Review + summary: Return a list of Reviews for an Asset + operationId: getReviewsByAsset + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/AssetIdPath' + - $ref: '#/components/parameters/ReviewRulesQuery' + - $ref: '#/components/parameters/ReviewResultQuery' + - $ref: '#/components/parameters/ReviewStatusQuery' + - $ref: '#/components/parameters/BenchmarkIdQuery' + - $ref: '#/components/parameters/MetadataQuery' + - $ref: '#/components/parameters/ReviewsProjectionQuery' + responses: + '200': + description: ReviewAssetProjected response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ReviewAsset' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + post: + tags: + - Review + summary: Post one or more Reviews + description: | + The request body is an array that can contain both new and updated Reviews. All Reviews MUST contain the properties `ruleId`, `result`, `detail`, and `comment`. The overall request is validated as follows: + + - conformance with the OAS schema for `ReviewAssetPost` + - the requesting user has been granted access to the {collectionId} + + **For all Reviews** + + - a string value for the `status` property will set the stored value to `{ label: , text: null }` + - an absent `resultEngine` property will set the stored value to `null` + + **For updated Reviews** + + - a `null` value for either `detail` or `comment` will retain the existing value. + - an absent `status` property will either retain the existing value or update the `status` value to `{ label: "saved", text: "Review change triggered status update" }`, in accordance with the Collection `settings.status.resetCriteria`. + + **For new Reviews** + + - a `null` value for either `detail` or `comment` will set the stored value to the empty string. + - an absent `status` property will set the stored value to `{ label: "saved", text: null }`. + + **Each new or updated Review is permitted or rejected as follows:** + + - If the requesting user's collection grant is `restricted` AND the `ruleId` is not included in any version of any `benchmarkId` for which the requesting user been granted access, then **reject** the Review + - If the optional property `status` is absent or `status.label` has value `saved`, then permit the Review + - If the new or updated Review would not be submittable according to the Collection settings, then **reject** the Review + - If the value of `status.label` is `submitted`, then **permit** the Review. + - If the value of `status.label` is `accepted` or `rejected` AND the Collection settings allow Reviews to be Accepted or Rejected, then **permit** the Review. + - If `status.label` has value `accepted` or `rejected` AND the Collection settings prohibit Reviews from being Accepted or Rejected, then **reject** the Review. + operationId: postReviewsByAsset + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/AssetIdPath' + requestBody: + content: + application/json: + schema: + type: array + minItems: 1 + items: + $ref: '#/components/schemas/ReviewAssetPost' + responses: + '200': + description: ReviewPostResponse response + content: + application/json: + schema: + $ref: '#/components/schemas/ReviewPostResponse' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/reviews/{assetId}/{ruleId}': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/AssetIdPath' + - $ref: '#/components/parameters/RuleIdPath' + - $ref: '#/components/parameters/ReviewProjectionQuery' + get: + tags: + - Review + summary: Return the Review for an Asset and Rule + operationId: getReviewByAssetRule + responses: + '200': + description: ReviewAssetRuleRead response + content: + application/json: + schema: + $ref: '#/components/schemas/ReviewAssetRuleRead' + '204': + description: The requested resource has no content. + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + patch: + tags: + - Review + summary: Merge the provided properties with an existing Review + description: | + The request MUST target an existing Review and the request body MUST contain one or more Review properties. The overall request is validated as follows: + + - the request body conforms with the OAS schema for `ReviewAssetRulePatch` + - a request body that includes `resultEngine` must also include `result` + - the requesting user has been granted access to the {collectionId} + - a Review already exists for the {assetId} and {ruleId} + + A string value for the `status` property will set the stored value to `{ label: , text: null }`. + If the request includes a `result`, then the `resultEngine` value will be set to `null` unless the request includes an explicit `resultEngine` value. + + An absent `status` property may still lead to the `status` value being updated to `{ label: "saved", text: "Review change triggered status update" }`, in accordance with the Collection `settings.status.resetCriteria`. + + Unlike the corresponding PUT endpoint, the `detail` and `comment` properties do not support `null` as a value. + + The request is permitted or rejected as follows: + + - If the requesting user's collection grant is `restricted` AND the `assetId` is not included in any user grant, then **reject** the Review + - If the requesting user's collection grant is `restricted` AND the `ruleId` is not included in any version of any `benchmarkId` for which the user been granted access, then **reject** the Review + - If the new or updated Review would not be submittable according to the Collection settings, then **reject** the Review + - If the value of `status.label` is `submitted`, then **permit** the Review. + - If the value of `status.label` is `accepted` or `rejected` AND the Collection settings allow Reviews to be Accepted or Rejected, then **permit** the Review. + - If `status.label` has value `accepted` or `rejected` AND the Collection settings prohibit Reviews from being Accepted or Rejected, then **reject** the Review. + operationId: patchReviewByAssetRule + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ReviewAssetRulePatch' + responses: + '200': + description: ReviewProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/ReviewAssetRuleRead' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + put: + tags: + - Review + summary: Set all properties of a Review + description: | + The request can target either a new or an existing Review. The request body MUST contain the Review properties `result`, `detail`, and `comment`. The overall request is validated as follows: + + - conformance with the OAS schema for `ReviewAssetRulePut` + - the requesting user has been granted access to the {collectionId} + + **For all Reviews** + + - a string value for the `status` property will set the stored value to `{ label: , text: null }` + - an absent `resultEngine` property will set the stored value to `resultEngine: null` + + **For updated Reviews** + + - a `null` value for either `detail` or `comment` will retain the existing value. + - an absent `status` property will either retain or update the `status` value to `{ label: "saved", text: "Review change triggered status update" }`, in accordance with the Collection `settings.status.resetCriteria`. + + **For new Reviews** + + - a `null` value for either `detail` or `comment` will set the stored value to the empty string. + - an absent `status` property will set the stored value to `{ label: "saved", text: null }`. + + The request is permitted or rejected as follows: + + - If the requesting user's collection grant is `restricted` AND the `assetId` is not included in any user grant, then **reject** the Review + - If the requesting user's collection grant is `restricted` AND the `ruleId` is not included in any version of any `benchmarkId` for which the user been granted access, then **reject** the Review + - If the new or updated Review would not be submittable according to the Collection settings, then **reject** the Review + - If the value of `status.label` is `submitted`, then **permit** the Review. + - If the value of `status.label` is `accepted` or `rejected` AND the Collection settings allow Reviews to be Accepted or Rejected, then **permit** the Review. + - If `status.label` has value `accepted` or `rejected` AND the Collection settings prohibit Reviews from being Accepted or Rejected, then **reject** the Review. + operationId: putReviewByAssetRule + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ReviewAssetRulePut' + responses: + '200': + description: ReviewProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/ReviewAssetRuleRead' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + delete: + tags: + - Review + summary: Delete a Review + operationId: deleteReviewByAssetRule + # parameters: + responses: + '200': + description: ReviewProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/ReviewAssetRuleRead' + '204': + description: No Content + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/reviews/{assetId}/{ruleId}/metadata': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/AssetIdPath' + - $ref: '#/components/parameters/RuleIdPath' + get: + tags: + - Review + summary: Return the metadata for Review + operationId: getReviewMetadata + responses: + '200': + description: Metadata response + content: + application/json: + schema: + $ref: '#/components/schemas/Metadata' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + patch: + tags: + - Review + summary: Merge the provided object to a Review metadata + operationId: patchReviewMetadata + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Metadata' + responses: + '200': + description: Metadata response + content: + application/json: + schema: + $ref: '#/components/schemas/Metadata' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + put: + tags: + - Review + summary: Set a Review metadata to the provided object + operationId: putReviewMetadata + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Metadata' + responses: + '200': + description: Metadata response + content: + application/json: + schema: + $ref: '#/components/schemas/Metadata' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/reviews/{assetId}/{ruleId}/metadata/keys': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/AssetIdPath' + - $ref: '#/components/parameters/RuleIdPath' + get: + tags: + - Review + summary: Return the keys of the provided Review's metadata + operationId: getReviewMetadataKeys + responses: + '200': + description: MetadataKeys response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetadataKey' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/reviews/{assetId}/{ruleId}/metadata/keys/{key}': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/AssetIdPath' + - $ref: '#/components/parameters/RuleIdPath' + - $ref: '#/components/parameters/MetadataKeyPath' + get: + tags: + - Review + summary: Return the value of the provided Review metadata key + operationId: getReviewMetadataValue + responses: + '200': + description: MetadataValue response + content: + application/json: + schema: + $ref: '#/components/schemas/MetadataValue' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + put: + tags: + - Review + summary: Set the value of the provided Review metadata key to the provided string + operationId: putReviewMetadataValue + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/MetadataValue' + responses: + '204': + description: Empty to avoid large response after putting key with large value + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + delete: + tags: + - Review + summary: Remove the provided Review metadata key + operationId: deleteReviewMetadataKey + responses: + '204': + description: Empty to avoid large response after deleting key with large value + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/labels': + get: + tags: + - Collection + summary: Return labels of the specified Collection + operationId: getCollectionLabels + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + responses: + 200: + description: Labels response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Label' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + post: + tags: + - Collection + summary: Create a label in the specified Collection + operationId: createCollectionLabel + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/LabelCreate' + responses: + 201: + description: Label response + content: + application/json: + schema: + $ref: '#/components/schemas/Label' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/labels/batch': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + post: + tags: + - Collection + summary: Create multiple labels in the specified Collection + operationId: createCollectionLabels + requestBody: + required: true + content: + application/json: + schema: + type: array + minItems: 1 + items: + $ref: '#/components/schemas/LabelCreate' + responses: + 201: + description: Labels response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Label' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/labels/{labelId}': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/LabelIdPath' + get: + tags: + - Collection + summary: Return the specified Label of the specified Collection + operationId: getCollectionLabelById + responses: + 200: + description: Labels response + content: + application/json: + schema: + $ref: '#/components/schemas/Label' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + patch: + tags: + - Collection + summary: Update an existing Label + operationId: patchCollectionLabelById + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/LabelUpdate' + responses: + '200': + description: Label response + content: + application/json: + schema: + $ref: '#/components/schemas/Label' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + delete: + tags: + - Collection + summary: Delete a Label + operationId: deleteCollectionLabelById + responses: + '204': + description: No Content + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/labels/{labelId}/assets': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/LabelIdPath' + get: + tags: + - Collection + - Asset + summary: Return the Assets mapped to the Label + operationId: getAssetsByCollectionLabelId + responses: + '200': + description: Asset response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AssetBasic' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + put: + tags: + - Collection + - Asset + summary: Replace the Label's Asset mappings + operationId: putAssetsByCollectionLabelId + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/String255' + responses: + '200': + description: The Label's Asset mappings + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AssetBasic' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/metadata': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + get: + tags: + - Collection + summary: Return the metadata for Collection + operationId: getCollectionMetadata + responses: + '200': + description: Metadata response + content: + application/json: + schema: + $ref: '#/components/schemas/Metadata' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + patch: + tags: + - Collection + summary: Merge the provided object to a Collection metadata + operationId: patchCollectionMetadata + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Metadata' + responses: + '200': + description: Metadata response + content: + application/json: + schema: + $ref: '#/components/schemas/Metadata' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + put: + tags: + - Collection + summary: Set a Collection metadata to the provided object + operationId: putCollectionMetadata + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Metadata' + responses: + '200': + description: Metadata response + content: + application/json: + schema: + $ref: '#/components/schemas/Metadata' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/metadata/keys': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + get: + tags: + - Collection + summary: Return the keys of the provided Collection metadata + operationId: getCollectionMetadataKeys + responses: + '200': + description: MetadataKeys response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetadataKey' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/metadata/keys/{key}': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/MetadataKeyPath' + get: + tags: + - Collection + summary: Return the value of the provided Collection metadata key + operationId: getCollectionMetadataValue + responses: + '200': + description: MetadataValue response + content: + application/json: + schema: + $ref: '#/components/schemas/MetadataValue' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + put: + tags: + - Collection + summary: Set the value of the provided Collection metadata key to the provided string + operationId: putCollectionMetadataValue + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/MetadataValue' + responses: + '204': + description: Empty to avoid large response after putting key with large value + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + delete: + tags: + - Collection + summary: Remove the provided Collection metadata key + operationId: deleteCollectionMetadataKey + responses: + '204': + description: Empty to avoid large response after deleting key with large value + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + + '/collections/{collectionId}/metrics/detail': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/AssetIdArrayQuery' + - $ref: '#/components/parameters/LabelIdQuery' + - $ref: '#/components/parameters/LabelNameQuery' + - $ref: '#/components/parameters/LabelMatchQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return unaggregated Asset/STIG metrics for the specified Collection + operationId: getMetricsDetailByCollection + responses: + '200': + description: Metrics response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetricsDetailUnagg' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/metrics/detail/asset': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/AssetIdArrayQuery' + - $ref: '#/components/parameters/LabelIdQuery' + - $ref: '#/components/parameters/LabelNameQuery' + - $ref: '#/components/parameters/LabelMatchQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return metrics for the specified Collection aggregated by Asset + operationId: getMetricsDetailByCollectionAggAsset + responses: + '200': + description: Metrics response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetricsDetailAggAsset' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/metrics/detail/collection': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/AssetIdArrayQuery' + - $ref: '#/components/parameters/LabelIdQuery' + - $ref: '#/components/parameters/LabelNameQuery' + - $ref: '#/components/parameters/LabelMatchQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return aggregated metrics for the specified Collection + operationId: getMetricsDetailByCollectionAgg + responses: + '200': + description: Metrics response + content: + application/json: + schema: + $ref: '#/components/schemas/MetricsDetailAggCollection' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/metrics/detail/label': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/AssetIdArrayQuery' + - $ref: '#/components/parameters/LabelIdQuery' + - $ref: '#/components/parameters/LabelNameQuery' + - $ref: '#/components/parameters/LabelMatchQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return metrics for the specified Collection aggregated by Label + operationId: getMetricsDetailByCollectionAggLabel + responses: + '200': + description: Metrics response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetricsDetailAggLabel' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/metrics/detail/stig': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/AssetIdArrayQuery' + - $ref: '#/components/parameters/LabelIdQuery' + - $ref: '#/components/parameters/LabelNameQuery' + - $ref: '#/components/parameters/LabelMatchQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return metrics for the specified Collection aggregated by STIG + operationId: getMetricsDetailByCollectionAggStig + responses: + '200': + description: Metrics response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetricsDetailAggStig' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + + '/collections/{collectionId}/metrics/summary': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/AssetIdArrayQuery' + - $ref: '#/components/parameters/LabelIdQuery' + - $ref: '#/components/parameters/LabelNameQuery' + - $ref: '#/components/parameters/LabelMatchQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return unaggregated Asset/STIG metrics for the specified Collection + operationId: getMetricsSummaryByCollection + responses: + '200': + description: Metrics response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetricsSummaryUnagg' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/metrics/summary/asset': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/AssetIdArrayQuery' + - $ref: '#/components/parameters/LabelIdQuery' + - $ref: '#/components/parameters/LabelNameQuery' + - $ref: '#/components/parameters/LabelMatchQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return metrics for the specified Collection aggregated by Asset + operationId: getMetricsSummaryByCollectionAggAsset + responses: + '200': + description: Metrics response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetricsSummaryAggAsset' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/metrics/summary/collection': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/AssetIdArrayQuery' + - $ref: '#/components/parameters/LabelIdQuery' + - $ref: '#/components/parameters/LabelNameQuery' + - $ref: '#/components/parameters/LabelMatchQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return aggregated metrics for the specified Collection + operationId: getMetricsSummaryByCollectionAgg + responses: + '200': + description: Metrics response + content: + application/json: + schema: + $ref: '#/components/schemas/MetricsSummaryAggCollection' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/metrics/summary/label': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/AssetIdArrayQuery' + - $ref: '#/components/parameters/LabelIdQuery' + - $ref: '#/components/parameters/LabelNameQuery' + - $ref: '#/components/parameters/LabelMatchQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return metrics for the specified Collection aggregated by Label + operationId: getMetricsSummaryByCollectionAggLabel + responses: + '200': + description: Metrics response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetricsSummaryAggLabel' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/metrics/summary/stig': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/AssetIdArrayQuery' + - $ref: '#/components/parameters/LabelIdQuery' + - $ref: '#/components/parameters/LabelNameQuery' + - $ref: '#/components/parameters/LabelMatchQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return metrics for the specified Collection aggregated by STIG + operationId: getMetricsSummaryByCollectionAggStig + responses: + '200': + description: Metrics response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetricsSummaryAggStig' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + + '/collections/{collectionId}/poam': + get: + tags: + - Collection + summary: Return a POAM-like spreadsheet for the specified Collection aggregated by groupId + operationId: getPoamByCollection + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/PoamAggregatorQuery' + - name: acceptedOnly + in: query + schema: + type: boolean + default: false + - $ref: '#/components/parameters/BenchmarkIdQuery' + - $ref: '#/components/parameters/AssetIdQuery' + - name: date + description: Value for columns Scheduled Completion Date, Milestone With Completion Dates, Milestone Changes + in: query + schema: + type: string + pattern: '^(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])/\d{4}$' + - name: office + description: Value for column Office/Org + in: query + schema: + type: string + maxLength: 255 + allowReserved: true + - name: status + description: Value for column Status + in: query + schema: + type: string + maxLength: 255 + allowReserved: true + - $ref: '#/components/parameters/PoamFormatQuery' + - name: mccastPackageId + description: Value for POAM MCCAST PackageId + in: query + schema: + type: string + maxLength: 255 + allowReserved: true + - name: mccastAuthName + description: Value for POAM MCCAST Authorization Name + in: query + schema: + type: string + maxLength: 255 + allowReserved: true + responses: + '200': + description: CollectionFinding response + content: + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet: + schema: + type: string + format: binary + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/review-history': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + get: + tags: + - Collection + summary: Return history records for the specified Collection that meet the specified criteria + operationId: getReviewHistoryByCollection + parameters: + - $ref: '#/components/parameters/StartDateQuery' # Lower bound (earliest date) of returned history entry timestamps + - $ref: '#/components/parameters/EndDateQuery' # Upper bound (latest date) of returned history entry timestamps + - $ref: '#/components/parameters/AssetIdQuery' # return review history entries for just the specified assetId, if provided. + - $ref: '#/components/parameters/RuleIdQuery' # return review history entries for just the specified RuleId, if provided. + - $ref: '#/components/parameters/ReviewStatusQuery' # return review history entries with the specified status + responses: + '200': + description: ReviewHistory response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ReviewHistoryAsset' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + delete: + tags: + - Collection + summary: Remove history records that meet specified criteria + operationId: deleteReviewHistoryByCollection + parameters: + - $ref: '#/components/parameters/RetentionDateQuery' # Review History Entries older than this date will be deleted. + - $ref: '#/components/parameters/AssetIdQuery' # Apply operation to just the specified assetId, if provided. + responses: + '200': + description: Number of history records deleted. + content: + application/json: + schema: + $ref: '#/components/schemas/ReviewHistoryDeleted' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/review-history/stats': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + get: + tags: + - Collection + summary: Return history statistics for the specified Collection + operationId: getReviewHistoryStatsByCollection + parameters: + - $ref: '#/components/parameters/StartDateQuery' # Lower bound (earliest date) of returned history entry count + - $ref: '#/components/parameters/EndDateQuery' # Upper bound (latest date) of returned history entry count + - $ref: '#/components/parameters/AssetIdQuery' # return review history stats for just the specified assetId, if provided. + - $ref: '#/components/parameters/RuleIdQuery' # return review history stats for just the specified RuleId, if provided. + - $ref: '#/components/parameters/ReviewStatusQuery' # return review history stats with the specified status + - $ref: '#/components/parameters/ReviewHistoryStatsProjectionQuery' + responses: + '200': + description: ReviewHistoryStats response + content: + application/json: + schema: + $ref: '#/components/schemas/ReviewHistoryStats' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/stigs': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/LabelIdQuery' + - $ref: '#/components/parameters/LabelNameQuery' + - $ref: '#/components/parameters/LabelMatchQuery' + - $ref: '#/components/parameters/CollectionStigProjectionQuery' + get: + tags: + - Collection + summary: Return the STIGs mapped in the specified Collection + operationId: getStigsByCollection + responses: + '200': + description: Collection STIGs array response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/CollectionStigWithAssetCount' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/stigs/{benchmarkId}': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/BenchmarkIdPath' + - $ref: '#/components/parameters/CollectionStigProjectionQuery' + get: + tags: + - Collection + summary: Return the STIG mapped in the specified Collection + operationId: getStigByCollection + responses: + '200': + description: Collection STIGs array response + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionStigWithAssetCount' + '204': + description: No content because STIG is not assigned + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + post: + tags: + - Collection + summary: Set the default Revision and/or the Asset list of a STIG in a Collection + description: | + Neither of the request body properties is required but at least one must be present. If the path parameter `{benchmarkId}` is not already mapped to at least one Asset in `{collectionId}`, then the `assetIds` property must be present. + operationId: writeStigPropsByCollectionStig + requestBody: + required: true + content: + application/json: + schema: + type: object + additionalProperties: false + minProperties: 1 + properties: + defaultRevisionStr: + $ref: '#/components/schemas/RevisionStr' + assetIds: + type: array + items: + $ref: '#/components/schemas/StringIntId' + responses: + '200': + description: Default Revision response + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionStigWithAssetCount' + '204': + description: No content because STIG is not assigned + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/stigs/{benchmarkId}/assets': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/BenchmarkIdPath' + get: + tags: + - Asset + - Collection + summary: Get the Assets in a Collection attached to a STIG + description: '' + operationId: getAssetsByStig + parameters: + - $ref: '#/components/parameters/LabelIdQuery' + - $ref: '#/components/parameters/LabelNameQuery' + - $ref: '#/components/parameters/LabelMatchQuery' + responses: + '200': + description: AssetBasicProjected response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AssetBasicProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + put: + tags: + - Asset + - Collection + summary: Set the Assets mapped to a STIG + description: '' + operationId: attachAssetsToStig + requestBody: + required: true + description: A list of assetIds from the specified Collection + content: + application/json: + schema: + type: array + items: + type: string + responses: + '200': + description: AssetBasicProjected response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AssetBasicProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection' + '/collections/{collectionId}/unreviewed/assets': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/AssetIdQuery' + - $ref: '#/components/parameters/LabelIdQuery' + - $ref: '#/components/parameters/LabelNameQuery' + - $ref: '#/components/parameters/BenchmarkIdQuery' + - $ref: '#/components/parameters/RuleSeverityQuery' + - $ref: '#/components/parameters/UnreviewedAssetsProjectionQuery' + get: + tags: + - Collection + summary: EXPERIMENTAL - Return the Assets in the specified Collection with unreviewed Rules + operationId: getUnreviewedAssetsByCollection + responses: + '200': + description: UnreviewedAsset response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/UnreviewedAsset' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/unreviewed/rules': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/RuleIdQuery' + - $ref: '#/components/parameters/LabelIdQuery' + - $ref: '#/components/parameters/LabelNameQuery' + - $ref: '#/components/parameters/BenchmarkIdQuery' + - $ref: '#/components/parameters/RuleSeverityQuery' + - $ref: '#/components/parameters/UnreviewedRulesProjectionQuery' + get: + tags: + - Collection + summary: EXPERIMENTAL - Return the Rules in the specified Collection with unreviewed Assets + operationId: getUnreviewedRulesByCollection + responses: + '200': + description: UnreviewedRules response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/UnreviewedRule' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/{collectionId}/users/{userId}/effective-acl': + parameters: + - $ref: '#/components/parameters/CollectionIdPath' + - $ref: '#/components/parameters/UserIdPath' + get: + tags: + - Collection + summary: Return a User's effective access rules for the specified Collection. + operationId: getEffectiveAclByCollectionUser + responses: + '200': + description: EffectiveAcl array response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/EffectiveAcl' + '403': + $ref: '#/components/responses/Forbidden' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/meta/metrics/detail': + parameters: + - $ref: '#/components/parameters/CollectionIdArrayQuery' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return fully aggregated meta-metrics + operationId: getMetricsDetailByMeta + responses: + '200': + description: Metrics response + content: + application/json: + schema: + $ref: '#/components/schemas/MetricsDetailAggMeta' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/meta/metrics/detail/collection': + parameters: + - $ref: '#/components/parameters/CollectionIdArrayQuery' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/RevisionIdArrayQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return meta-metrics aggregated by Collection + operationId: getMetricsDetailByMetaAggCollection + responses: + '200': + description: Metrics response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetricsDetailAggCollection' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/meta/metrics/detail/stig': + parameters: + - $ref: '#/components/parameters/CollectionIdArrayQuery' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return meta-metrics aggregated by STIG + operationId: getMetricsDetailByMetaAggStig + responses: + '200': + description: Metrics response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetricsDetailAggStig' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/meta/metrics/summary': + parameters: + - $ref: '#/components/parameters/CollectionIdArrayQuery' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return fully aggregated meta-metrics + operationId: getMetricsSummaryByMeta + responses: + '200': + description: Metrics response + content: + application/json: + schema: + $ref: '#/components/schemas/MetricsSummaryAggMeta' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/meta/metrics/summary/collection': + parameters: + - $ref: '#/components/parameters/CollectionIdArrayQuery' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/RevisionIdArrayQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return meta-metrics aggregated by Collection + operationId: getMetricsSummaryByMetaAggCollection + responses: + '200': + description: Metrics response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetricsSummaryAggCollection' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + '/collections/meta/metrics/summary/stig': + parameters: + - $ref: '#/components/parameters/CollectionIdArrayQuery' + - $ref: '#/components/parameters/BenchmarkIdArrayQuery' + - $ref: '#/components/parameters/MetricsFormatQuery' + get: + tags: + - Metrics + summary: Return meta-metrics aggregated by STIG + operationId: getMetricsSummaryByMetaAggStig + responses: + '200': + description: Metrics response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MetricsSummaryAggStig' + text/csv: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:collection:read' + + /jobs: + get: + summary: List jobs + tags: + - Job + operationId: getJobs + parameters: + - $ref: '#/components/parameters/ElevateQuery' + responses: + '200': + description: List of jobs + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Job' + 'default': + description: error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - stig-manager:op:read + x-elevation-required: true + post: + summary: Create a new job + tags: + - Job + operationId: postJob + parameters: + - $ref: '#/components/parameters/ElevateQuery' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JobCreate' + responses: + '201': + description: Job created + content: + application/json: + schema: + $ref: '#/components/schemas/Job' + 'default': + description: error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - stig-manager:op + x-elevation-required: true + /jobs/{jobId}: + get: + summary: Get job by ID + tags: + - Job + operationId: getJob + parameters: + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/JobIdPath' + responses: + '200': + description: Job details + content: + application/json: + schema: + $ref: '#/components/schemas/Job' + 'default': + description: Job not found + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - stig-manager:op:read + x-elevation-required: true + delete: + summary: Delete job by ID + tags: + - Job + operationId: deleteJob + parameters: + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/JobIdPath' + responses: + '204': + description: Job deleted + 'default': + description: error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - stig-manager:op + x-elevation-required: true + patch: + summary: Update job by ID + tags: + - Job + operationId: patchJob + parameters: + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/JobIdPath' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/JobUpdate' + responses: + '200': + description: Job updated + content: + application/json: + schema: + $ref: '#/components/schemas/Job' + 'default': + description: error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - stig-manager:op + x-elevation-required: true + /jobs/{jobId}/runs: + get: + summary: List the job runs + tags: + - Job + operationId: getRunsByJob + parameters: + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/JobIdPath' + responses: + '200': + description: List of job runs + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/JobRun' + 'default': + description: error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - stig-manager:op:read + x-elevation-required: true + post: + summary: Start an immediate job run + tags: + - Job + operationId: runImmediateJob + parameters: + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/JobIdPath' + responses: + '201': + description: Job run created + content: + application/json: + schema: + $ref: '#/components/schemas/JobRunCreated' + 'default': + description: error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - stig-manager:op + x-elevation-required: true + /jobs/runs/{runId}: + get: + summary: Get a job run by ID + tags: + - Job + operationId: getRunById + parameters: + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/JobRunIdPath' + responses: + '200': + description: Job run details + content: + application/json: + schema: + $ref: '#/components/schemas/JobRun' + 'default': + description: error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - stig-manager:op:read + x-elevation-required: true + delete: + summary: Delete a job run by ID + tags: + - Job + operationId: deleteRunById + parameters: + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/JobRunIdPath' + responses: + '204': + description: Job run deleted + 'default': + description: error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - stig-manager:op + x-elevation-required: true + /jobs/runs/{runId}/output: + get: + summary: Get the output for a job run + tags: + - Job + operationId: getOutputByRun + parameters: + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/JobRunIdPath' + - $ref: '#/components/parameters/RunSequenceQuery' + responses: + '200': + description: Job run output + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/JobRunOutput' + 'default': + description: error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - stig-manager:op:read + x-elevation-required: true + /jobs/tasks: + get: + summary: List all tasks + tags: + - Job + operationId: getAllTasks + parameters: + - $ref: '#/components/parameters/ElevateQuery' + responses: + '200': + description: List of tasks + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/JobTask' + 'default': + description: error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - stig-manager:op:read + x-elevation-required: true + + /op/appdata: + get: + tags: + - Operation + summary: Export application data + operationId: getAppData + parameters: + - $ref: '#/components/parameters/AppDataFormatQuery' + - $ref: '#/components/parameters/ElevateQuery' + responses: + '200': + description: Exported data + content: + application/jsonl: + schema: + type: string + application/gzip: + schema: + type: string + format: binary + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - stig-manager:op:read + post: + tags: + - Operation + summary: Import and overwrite application data + operationId: replaceAppData + parameters: + - $ref: '#/components/parameters/ElevateQuery' + requestBody: + required: false + content: + application/gzip: + schema: + type: string + format: binary + application/x-gzip: + schema: + type: string + format: binary + application/jsonl: + schema: + type: string + format: binary + responses: + '200': + description: Import successful + content: + application/jsonl: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - stig-manager:op + /op/appdata/tables: + get: + tags: + - Operation + summary: Get the name and data length of each table + operationId: getAppDataTables + parameters: + - $ref: '#/components/parameters/ElevateQuery' + responses: + '200': + description: An array of table names and lengths + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AppDataTable' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - stig-manager:op:read + /op/appinfo: + get: + tags: + - Operation + summary: Return information about the application deployment + operationId: getAppInfo + parameters: + - $ref: '#/components/parameters/ElevateQuery' + - name: includeRowCounts + in: query + description: Include exact row counts for each table (slower) or use estimated counts (faster) + schema: + type: boolean + default: false + responses: + '200': + description: AppInfo response + content: + application/json: + schema: + $ref: '#/components/schemas/AppInfo' + security: + - oauth: + - stig-manager:op:read + /op/configuration: + get: + tags: + - Operation + summary: Return API version and configuration information + operationId: getConfiguration + security: [] + responses: + '200': + description: Configuration response + content: + application/json: + schema: + $ref: '#/components/schemas/ApiConfiguration' + /op/definition: + get: + tags: + - Operation + summary: Return the API definition + operationId: getDefinition + security: [] + parameters: + - $ref: '#/components/parameters/JsonPathQuery' + responses: + '200': + description: Definition response + content: + application/json: + schema: + $ref: '#/components/schemas/ApiDefinition' + /op/details: + get: + tags: + - Operation + summary: "DEPRECATED: replaced by /op/appinfo" + operationId: getDetails + parameters: + - $ref: '#/components/parameters/ElevateQuery' + responses: + '200': + description: Detail response + content: + application/json: + schema: + $ref: '#/components/schemas/Detail' + security: + - oauth: + - stig-manager:op:read + + + /op/state: + get: + tags: + - Operation + summary: Return information about the API state + operationId: getState + responses: + '200': + description: Detail response + content: + application/json: + schema: + $ref: '#/components/schemas/StateResponse' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /op/state/sse: + get: + tags: + - Operation + operationId: streamStateSse + summary: Stream Server-Sent Events (SSE) about changes to the current API state + description: > + Opens a one-way stream using SSE. + The response is a continuous stream of events in `text/event-stream` format. + responses: + '200': + description: Stream of events + content: + text/event-stream: + schema: + type: string + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /stigs: + get: + tags: + - STIG + summary: Return a list of available STIGs + operationId: getSTIGs + parameters: + - name: title + in: query + description: A string found anywhere in a STIG title + schema: + type: string + - $ref: '#/components/parameters/StigProjectionQuery' + - $ref: '#/components/parameters/ElevateQuery' + responses: + '200': + description: STIG response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/STIG' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:stig:read' + post: + tags: + - STIG + summary: Import a STIG Benchmark + operationId: importBenchmark + parameters: + - name: clobber + in: query + description: Should existing Revision data be overwritten + schema: + type: boolean + default: false + - $ref: '#/components/parameters/ElevateQuery' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + importFile: + type: string + format: binary + responses: + '200': + description: The added STIG + content: + application/json: + schema: + $ref: '#/components/schemas/RevisionPost' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:stig' + '/stigs/ccis/{cci}': + get: + tags: + - STIG + summary: Return data for the specified CCI + operationId: getCci + parameters: + - $ref: '#/components/parameters/CciProjectionQuery' + - name: cci + in: path + description: A path parameter that identifies a CCI + required: true + schema: + pattern: ^[0-9]{6}$ + type: string + responses: + '200': + description: CCI response + content: + application/json: + schema: + $ref: '#/components/schemas/Cci' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:stig:read' + '/stigs/rules/{ruleId}': + get: + tags: + - STIG + summary: Return the definition and associated check and fix for the specified Rule + description: | + Note: A very small number of edge cases are known to exist where published STIGs have updated Rule Content without updating the associated RuleId. In these cases, it is possible this endpoint may return inconsistent Rule info. If you need specific Rule information for a given STIG Revision, use the `/stigs/{benchmarkId}/revisions/{revisionStr}/rules/{ruleId}` endpoint. + operationId: getRuleByRuleId + parameters: + - $ref: '#/components/parameters/RuleProjectionQuery' + - name: ruleId + in: path + description: A path parameter that identifies a Rule + required: true + schema: + type: string + responses: + '200': + description: Rule response + content: + application/json: + schema: + $ref: '#/components/schemas/RuleProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:stig:read' + '/stigs/scap-maps': + get: + tags: + - STIG + summary: Return a list of SCAP benchmarkIds mapped to Manual benchmarkIds + operationId: getScapMap + responses: + '200': + description: SCAP Map response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SCAPMap' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:stig:read' + '/stigs/{benchmarkId}': + get: + tags: + - STIG + summary: Return properties of the specified STIG + operationId: getStigById + parameters: + - name: benchmarkId + in: path + description: A path parameter that identifies a STIG + required: true + schema: + type: string + - $ref: '#/components/parameters/ElevateQuery' + responses: + '200': + description: STIG response + content: + application/json: + schema: + $ref: '#/components/schemas/STIG' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:stig:read' + delete: + tags: + - STIG + summary: Deletes a STIG (*** and all revisions ***) + operationId: deleteStigById + parameters: + - name: benchmarkId + in: path + description: A path parameter that identifies a STIG + required: true + schema: + type: string + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/ForceQuery' + responses: + '200': + description: The deleted STIG + content: + application/json: + schema: + $ref: '#/components/schemas/STIG' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:stig' + x-rbac: + - admin + '/stigs/{benchmarkId}/revisions': + get: + tags: + - STIG + summary: Return a list of revisions for the specified STIG + operationId: getRevisionsByBenchmarkId + parameters: + - name: benchmarkId + in: path + description: A path parameter that identifies a STIG + required: true + schema: + type: string + - $ref: '#/components/parameters/ElevateQuery' + responses: + '200': + description: Revision response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Revision' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:stig:read' + '/stigs/{benchmarkId}/revisions/{revisionStr}': + get: + tags: + - STIG + summary: Return metadata for the specified revision of a STIG + operationId: getRevisionByString + parameters: + - name: benchmarkId + in: path + description: A path parameter that identifies a STIG + required: true + schema: + type: string + - name: revisionStr + in: path + description: A path parameter that identifies a STIG revision [V{version_num}R{release_num} | 'latest' ] + required: true + schema: + pattern: ^(V\d+R\d+(\.\d+)?|latest)$ + type: string + - $ref: '#/components/parameters/ElevateQuery' + responses: + '200': + description: Revision response + content: + application/json: + schema: + $ref: '#/components/schemas/Revision' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:stig:read' + delete: + tags: + - STIG + summary: Deletes the specified revision of a STIG + operationId: deleteRevisionByString + parameters: + - name: benchmarkId + in: path + description: A path parameter that identifies a STIG + required: true + schema: + type: string + - name: revisionStr + in: path + description: A path parameter that identifies a STIG revision [V{version_num}R{release_num} | 'latest' ] + required: true + schema: + pattern: ^(V\d+R\d+(\.\d+)?)$ + type: string + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/ForceQuery' + responses: + '200': + description: The deleted Revision + content: + application/json: + schema: + $ref: '#/components/schemas/Revision' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:stig' + x-rbac: + - admin + '/stigs/{benchmarkId}/revisions/{revisionStr}/ccis': + get: + tags: + - STIG + summary: Return a list of CCIs from a STIG revision + operationId: getCcisByRevision + parameters: + - name: benchmarkId + in: path + description: A path parameter that identifies a STIG + required: true + schema: + type: string + - name: revisionStr + in: path + description: A path parameter that identifies a STIG revision [V{version_num}R{release_num} | 'latest' ] + required: true + schema: + pattern: ^(V\d+R\d+(\.\d+)?|latest)$ + type: string + responses: + '200': + description: CCI response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/CciListItem' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:stig:read' + '/stigs/{benchmarkId}/revisions/{revisionStr}/groups': + get: + tags: + - STIG + summary: Return the list of groups for the specified revision of a STIG. + operationId: getGroupsByRevision + parameters: + - $ref: '#/components/parameters/GroupProjectionQuery' + - name: benchmarkId + in: path + description: A path parameter that identifies a STIG + required: true + schema: + type: string + - name: revisionStr + in: path + description: A path parameter that identifies a STIG revision [V{version_num}R{release_num} | 'latest' ] + required: true + schema: + pattern: ^(V\d+R\d+(\.\d+)?|latest)$ + type: string + responses: + '200': + description: GroupProjected response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/GroupProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:stig:read' + '/stigs/{benchmarkId}/revisions/{revisionStr}/groups/{groupId}': + get: + tags: + - STIG + summary: Return the rules, checks and fixes for a Group from a specified revision of a STIG. + description: None + operationId: getGroupByRevision + parameters: + - $ref: '#/components/parameters/GroupProjectionQuery' + - name: benchmarkId + in: path + description: A path parameter that identifies a STIG + required: true + schema: + type: string + - name: revisionStr + in: path + description: A path parameter that identifies a STIG revision [V{version_num}R{release_num} | 'latest' ] + required: true + schema: + pattern: ^(V\d+R\d+(\.\d+)?|latest)$ + type: string + - name: groupId + in: path + description: A path parameter that identifies a Group + required: true + schema: + type: string + responses: + '200': + description: Group response + content: + application/json: + schema: + $ref: '#/components/schemas/GroupProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:stig:read' + '/stigs/{benchmarkId}/revisions/{revisionStr}/rules': + get: + tags: + - STIG + summary: Return rule data for the specified revision of a STIG. + operationId: getRulesByRevision + parameters: + - $ref: '#/components/parameters/RuleProjectionQuery' + - name: benchmarkId + in: path + description: A path parameter that identifies a STIG + required: true + schema: + type: string + - name: revisionStr + in: path + description: A path parameter that identifies a STIG revision [V{version_num}R{release_num} | 'latest' ] + required: true + schema: + pattern: ^(V\d+R\d+(\.\d+)?|latest)$ + type: string + responses: + '200': + description: Rule response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/RuleProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:stig:read' + '/stigs/{benchmarkId}/revisions/{revisionStr}/rules/{ruleId}': + get: + tags: + - STIG + summary: Return rule data for the specified Rule in a revision of a STIG. + operationId: getRuleByRevision + parameters: + - $ref: '#/components/parameters/RuleProjectionQuery' + - name: benchmarkId + in: path + description: A path parameter that identifies a STIG + required: true + schema: + type: string + - name: revisionStr + in: path + description: A path parameter that identifies a STIG revision [V{version_num}R{release_num} | 'latest' ] + required: true + schema: + pattern: ^(V\d+R\d+(\.\d+)?|latest)$ + type: string + - name: ruleId + in: path + description: A path parameter that identifies a Rule + required: true + schema: + type: string + responses: + '200': + description: RuleProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/RuleProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:stig:read' + /user: + parameters: + - $ref: '#/components/parameters/UserPreferenceQuery' + get: + tags: + - User + summary: Return the requester's user information + operationId: getUser + responses: + '200': + description: User response + content: + application/json: + schema: + $ref: '#/components/schemas/UserProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:user:read' + /user/web-preferences: + get: + tags: + - User + summary: Return the requester's web-preferences + operationId: getUserWebPreferences + responses: + '200': + description: User Web Preferences response + content: + application/json: + schema: + $ref: '#/components/schemas/WebPreferences' + security: + - oauth: + - 'stig-manager:user:read' + patch: + tags: + - User + summary: Merge the provided object to the requester's web-preferences + operationId: patchUserWebPreferences + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/WebPreferencesPatch' + responses: + '200': + description: User Web Preferences response + content: + application/json: + schema: + $ref: '#/components/schemas/WebPreferences' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + # not semantically correct but needed for backwards compatability + - 'stig-manager:user:read' + /users: + parameters: + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/UserProjectionQuery' + get: + tags: + - User + summary: Return a list of Users accessible to the requester + operationId: getUsers + parameters: + - $ref: '#/components/parameters/UsernameQuery' + - $ref: '#/components/parameters/PrivilegeQuery' + - $ref: '#/components/parameters/UsernameMatchQuery' + - $ref: '#/components/parameters/UserStatusQuery' + responses: + '200': + description: UserProjected array response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/UserProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:user:read' + post: + tags: + - User + summary: Create a User + operationId: createUser + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UserPost' + responses: + '201': + description: UserProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/UserProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:user' + '/users/{userId}': + parameters: + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/UserProjectionQuery' + - $ref: '#/components/parameters/UserIdPath' + get: + tags: + - User + summary: Return a User + operationId: getUserByUserId + responses: + '200': + description: UserProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/UserProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:user:read' + patch: + tags: + - User + summary: Merge provided properties with a User + operationId: updateUser + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UserPatch' + responses: + '200': + description: UserProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/UserProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:user' + put: + tags: + - User + summary: Set all properties of a User + operationId: replaceUser + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UserPut' + responses: + '200': + description: UserProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/UserProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:user' + delete: + tags: + - User + summary: Delete a User that has never accessed the system. + operationId: deleteUser + responses: + '200': + description: UserProjected response + content: + application/json: + schema: + $ref: '#/components/schemas/UserProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:user' + /user-groups: + post: + tags: + - User + summary: Create a User Group + operationId: createUserGroup + parameters: + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/UserGroupProjectionQuery' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UserGroupPostOrPut' + responses: + '201': + description: UserGroup response + content: + application/json: + schema: + $ref: '#/components/schemas/UserGroupProjected' + default: + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:user' + get: + tags: + - User + summary: Get a list of User Groups accessible to the requester + operationId: getUserGroups + parameters: + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/UserGroupProjectionQuery' + responses: + '200': + description: UserGroups response + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/UserGroupProjected' + security: + - oauth: + - 'stig-manager:user:read' + '/user-groups/{userGroupId}': + get: + tags: + - User + summary: Return a User Group + operationId: getUserGroup + parameters: + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/UserGroupIdPath' + - $ref: '#/components/parameters/UserGroupProjectionQuery' + responses: + '200': + description: UserGroup response + content: + application/json: + schema: + $ref: '#/components/schemas/UserGroupProjected' + 'default': + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:user:read' + patch: + tags: + - User + summary: Patch a User Group + operationId: patchUserGroup + parameters: + - $ref: '#/components/parameters/UserGroupIdPath' + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/UserGroupProjectionQuery' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UserGroupPatch' + responses: + '200': + description: UserGroup response + content: + application/json: + schema: + $ref: '#/components/schemas/UserGroupProjected' + 'default': + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:user' + put: + tags: + - User + summary: Replace a User Group + operationId: putUserGroup + parameters: + - $ref: '#/components/parameters/UserGroupIdPath' + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/UserGroupProjectionQuery' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UserGroupPostOrPut' + responses: + '200': + description: UserGroup response + content: + application/json: + schema: + $ref: '#/components/schemas/UserGroupProjected' + 'default': + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:user' + delete: + tags: + - User + summary: Delete a User Group + operationId: deleteUserGroup + parameters: + - $ref: '#/components/parameters/UserGroupIdPath' + - $ref: '#/components/parameters/ElevateQuery' + - $ref: '#/components/parameters/UserGroupProjectionQuery' + responses: + '200': + description: UserGroup response + content: + application/json: + schema: + $ref: '#/components/schemas/UserGroupProjected' + 'default': + description: unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + security: + - oauth: + - 'stig-manager:user' +components: + schemas: + RoleId: + maximum: 4 + minimum: 1 + type: integer + AclForGrant: + type: object + properties: + defaultAccess: + $ref: '#/components/schemas/AclRuleAccess' + acl: + type: array + items: + $ref: '#/components/schemas/AclRuleBasic' + AclRuleAccess: + type: string + enum: + - none + - r + - rw + default: rw + AclRuleAssetBasic: + additionalProperties: false + type: object + properties: + asset: + $ref: '#/components/schemas/AssetBasic' + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + access: + $ref: '#/components/schemas/AclRuleAccess' + # required: + # - access + AclRuleAssetPut: + additionalProperties: false + type: object + properties: + assetId: + $ref: '#/components/schemas/AssetId' + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + access: + $ref: '#/components/schemas/AclRuleAccess' + required: + - access + AclRuleBasic: + anyOf: + - $ref: '#/components/schemas/AclRuleAssetBasic' + - $ref: '#/components/schemas/AclRuleLabel' + AclRuleLabel: + additionalProperties: false + type: object + properties: + label: + $ref: '#/components/schemas/LabelBasicWithColor' + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + access: + $ref: '#/components/schemas/AclRuleAccess' + required: + - access + AclRuleLabelBasic: + additionalProperties: false + type: object + properties: + label: + $ref: '#/components/schemas/LabelBasic' + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + access: + $ref: '#/components/schemas/AclRuleAccess' + required: + - access + AclRuleLabelPut: + additionalProperties: false + type: object + properties: + labelId: + $ref: '#/components/schemas/LabelId' + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + access: + $ref: '#/components/schemas/AclRuleAccess' + required: + - access + AclRulePut: + anyOf: + - $ref: '#/components/schemas/AclRuleAssetPut' + - $ref: '#/components/schemas/AclRuleLabelPut' + AclSource: + type: object + properties: + grantee: + $ref: '#/components/schemas/Grantee' + aclRule: + anyOf: + - $ref: '#/components/schemas/AclRuleAssetBasic' + - $ref: '#/components/schemas/AclRuleLabelBasic' + ApAcronym: + $ref: '#/components/schemas/String20Nullable' + ApiClassification: + type: string + enum: + - NONE + - U + - FOUO + - CUI + - C + - S + - TS + - SCI + ApiConfiguration: + additionalProperties: false + type: object + properties: + classification: + $ref: '#/components/schemas/ApiClassification' + commit: + $ref: '#/components/schemas/CommitObject' + lastMigration: + $ref: '#/components/schemas/LastMigration' + version: + $ref: '#/components/schemas/ApiVersion' + ApiDefinition: + oneOf: + - type: object + - type: array + ApiVersion: + $ref: '#/components/schemas/Version' + AppDataFormat: + type: string + default: 'gzip' + enum: + - jsonl + - gzip + AppDataTable: + type: object + properties: + name: + $ref: '#/components/schemas/String255' + rows: + type: number + dataLength: + type: number + AppInfo: + type: object + properties: + date: + $ref: '#/components/schemas/StringDateTime' + schema: + $ref: '#/components/schemas/AppInfoSchemaVersion' + version: + $ref: '#/components/schemas/ApiVersion' + collections: + type: object + additionalProperties: + $ref: '#/components/schemas/AppInfoCollection' + requests: + $ref: '#/components/schemas/AppInfoRequests' + users: + $ref: '#/components/schemas/AppInfoUsers' + groups: + type: object + additionalProperties: + $ref: '#/components/schemas/AppInfoGroups' + mysql: + $ref: '#/components/schemas/AppInfoMySql' + nodejs: + $ref: '#/components/schemas/AppInfoNodejs' + required: + - date + - schema + - version + - collections + - requests + - users + - mysql + - nodejs + AppInfoGroups: + type: object + properties: + name: + $ref: '#/components/schemas/String255' + members: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + created: + $ref: '#/components/schemas/Created' + modifiedDate: + $ref: '#/components/schemas/StringDateTime' + roles: + $ref: '#/components/schemas/AppInfoGroupsRoles' + required: + - name + - members + - created + - modifiedDate + - roles + AppInfoGroupsRoles: + type: object + properties: + full: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + owner: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + manage: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + restricted: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + required: + - full + - owner + - manage + - restricted + AppInfoSchemaVersion: + type: string + pattern: "^[a-zA-Z0-9_-]+-appinfo-v[0-9]+\\.[0-9]+$" + AppInfoNodejs: + type: object + properties: + version: + $ref: '#/components/schemas/ApiVersion' + uptime: + type: number + format: double + os: + $ref: '#/components/schemas/AppInfoNodeOs' + environment: + additionalProperties: + type: string + memory: + $ref: '#/components/schemas/AppInfoNodeMemory' + cpus: + type: array + items: + $ref: '#/components/schemas/AppInfoNodeCpus' + required: + - version + - uptime + - os + - environment + - memory + - cpus + AppInfoNodeOs: + type: object + properties: + platform: + $ref: '#/components/schemas/String255' + arch: + $ref: '#/components/schemas/String255' + osMachine: + $ref: '#/components/schemas/String255' + osName: + $ref: '#/components/schemas/String255' + osRelease: + $ref: '#/components/schemas/String255' + loadAverage: + $ref: '#/components/schemas/String255' + required: + - platform + - arch + - osMachine + - osName + - osRelease + - loadAverage + AppInfoNodeCpus: + type: object + properties: + model: + $ref: '#/components/schemas/String255' + speed: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + required: + - model + - speed + AppInfoNodeMemory: + type: object + properties: + rss: + $ref: '#/components/schemas/Integer64MinimumZero' + heapTotal: + $ref: '#/components/schemas/Integer64MinimumZero' + heapUsed: + $ref: '#/components/schemas/Integer64MinimumZero' + external: + $ref: '#/components/schemas/Integer64MinimumZero' + arrayBuffers: + $ref: '#/components/schemas/Integer64MinimumZero' + maxRss: + $ref: '#/components/schemas/Integer64MinimumZero' + required: + - rss + - heapTotal + - heapUsed + - external + - arrayBuffers + - maxRss + AppInfoMySql: + type: object + properties: + version: + $ref: '#/components/schemas/ApiVersion' + tables: + $ref: '#/components/schemas/AppInfoMysqlTableStats' + variables: + $ref: '#/components/schemas/AppInfoMysqlVariables' + status: + $ref: '#/components/schemas/AppInfoMysqlStatus' + required: + - version + - tables + - variables + - status + AppInfoMysqlStatus: + type: object + properties: + # Network + Bytes_received: + $ref: '#/components/schemas/String255' + Bytes_sent: + $ref: '#/components/schemas/String255' + # Handler operations + Handler_commit: + $ref: '#/components/schemas/String255' + Handler_update: + $ref: '#/components/schemas/String255' + Handler_write: + $ref: '#/components/schemas/String255' + # Buffer pool health - critical for performance monitoring + Innodb_buffer_pool_bytes_data: + $ref: '#/components/schemas/String255' + Innodb_buffer_pool_pages_total: + $ref: '#/components/schemas/String255' + Innodb_buffer_pool_pages_free: + $ref: '#/components/schemas/String255' + Innodb_buffer_pool_pages_dirty: + $ref: '#/components/schemas/String255' + Innodb_buffer_pool_pages_flushed: + $ref: '#/components/schemas/String255' + Innodb_buffer_pool_read_requests: + $ref: '#/components/schemas/String255' + Innodb_buffer_pool_reads: + $ref: '#/components/schemas/String255' + Innodb_buffer_pool_wait_free: + $ref: '#/components/schemas/String255' + # Redo log / Checkpoint - detect checkpoint thrashing + Innodb_redo_log_current_lsn: + $ref: '#/components/schemas/String255' + Innodb_redo_log_checkpoint_lsn: + $ref: '#/components/schemas/String255' + Innodb_redo_log_flushed_to_disk_lsn: + $ref: '#/components/schemas/String255' + Innodb_log_waits: + $ref: '#/components/schemas/String255' + Innodb_log_writes: + $ref: '#/components/schemas/String255' + Innodb_os_log_fsyncs: + $ref: '#/components/schemas/String255' + # I/O operations + Innodb_data_reads: + $ref: '#/components/schemas/String255' + Innodb_data_writes: + $ref: '#/components/schemas/String255' + Innodb_data_fsyncs: + $ref: '#/components/schemas/String255' + Innodb_pages_read: + $ref: '#/components/schemas/String255' + Innodb_pages_written: + $ref: '#/components/schemas/String255' + Innodb_pages_created: + $ref: '#/components/schemas/String255' + # Row operations + Innodb_rows_read: + $ref: '#/components/schemas/String255' + Innodb_rows_updated: + $ref: '#/components/schemas/String255' + Innodb_rows_inserted: + $ref: '#/components/schemas/String255' + Innodb_rows_deleted: + $ref: '#/components/schemas/String255' + # Row locking + Innodb_row_lock_waits: + $ref: '#/components/schemas/String255' + Innodb_row_lock_current_waits: + $ref: '#/components/schemas/String255' + Innodb_row_lock_time: + $ref: '#/components/schemas/String255' + Innodb_row_lock_time_avg: + $ref: '#/components/schemas/String255' + Innodb_row_lock_time_max: + $ref: '#/components/schemas/String255' + # Temp tables + Created_tmp_tables: + $ref: '#/components/schemas/String255' + Created_tmp_disk_tables: + $ref: '#/components/schemas/String255' + Created_tmp_files: + $ref: '#/components/schemas/String255' + # Table cache + Open_tables: + $ref: '#/components/schemas/String255' + Opened_tables: + $ref: '#/components/schemas/String255' + Table_open_cache_hits: + $ref: '#/components/schemas/String255' + Table_open_cache_misses: + $ref: '#/components/schemas/String255' + Table_open_cache_overflows: + $ref: '#/components/schemas/String255' + # Connections/Threads + Connections: + $ref: '#/components/schemas/String255' + Max_used_connections: + $ref: '#/components/schemas/String255' + Threads_connected: + $ref: '#/components/schemas/String255' + Threads_running: + $ref: '#/components/schemas/String255' + Threads_created: + $ref: '#/components/schemas/String255' + Threads_cached: + $ref: '#/components/schemas/String255' + Aborted_connects: + $ref: '#/components/schemas/String255' + Aborted_clients: + $ref: '#/components/schemas/String255' + # Queries + Queries: + $ref: '#/components/schemas/String255' + Slow_queries: + $ref: '#/components/schemas/String255' + Select_scan: + $ref: '#/components/schemas/String255' + Select_full_join: + $ref: '#/components/schemas/String255' + Select_full_range_join: + $ref: '#/components/schemas/String255' + # Sorts + Sort_merge_passes: + $ref: '#/components/schemas/String255' + Sort_scan: + $ref: '#/components/schemas/String255' + Sort_range: + $ref: '#/components/schemas/String255' + Sort_rows: + $ref: '#/components/schemas/String255' + # Table locks + Table_locks_immediate: + $ref: '#/components/schemas/String255' + Table_locks_waited: + $ref: '#/components/schemas/String255' + # Server + Uptime: + $ref: '#/components/schemas/String255' + Uptime_since_flush_status: + $ref: '#/components/schemas/String255' + required: + # Network + - Bytes_received + - Bytes_sent + # Handler operations + - Handler_commit + - Handler_update + - Handler_write + # Buffer pool health + - Innodb_buffer_pool_bytes_data + - Innodb_buffer_pool_pages_total + - Innodb_buffer_pool_pages_free + - Innodb_buffer_pool_pages_dirty + - Innodb_buffer_pool_pages_flushed + - Innodb_buffer_pool_read_requests + - Innodb_buffer_pool_reads + - Innodb_buffer_pool_wait_free + # Redo log / Checkpoint + # - Innodb_redo_log_current_lsn (MySQL 8.0.30+ only) + # - Innodb_redo_log_checkpoint_lsn (MySQL 8.0.30+ only) + # - Innodb_redo_log_flushed_to_disk_lsn (MySQL 8.0.30+ only) + - Innodb_log_waits + - Innodb_log_writes + - Innodb_os_log_fsyncs + # I/O operations + - Innodb_data_reads + - Innodb_data_writes + - Innodb_data_fsyncs + - Innodb_pages_read + - Innodb_pages_written + - Innodb_pages_created + # Row operations + - Innodb_rows_read + - Innodb_rows_updated + - Innodb_rows_inserted + - Innodb_rows_deleted + # Row locking + - Innodb_row_lock_waits + - Innodb_row_lock_current_waits + - Innodb_row_lock_time + - Innodb_row_lock_time_avg + - Innodb_row_lock_time_max + # Temp tables + - Created_tmp_tables + - Created_tmp_disk_tables + - Created_tmp_files + # Table cache + - Open_tables + - Opened_tables + - Table_open_cache_hits + - Table_open_cache_misses + - Table_open_cache_overflows + # Connections/Threads + - Connections + - Max_used_connections + - Threads_connected + - Threads_running + - Threads_created + - Threads_cached + - Aborted_connects + - Aborted_clients + # Queries + - Queries + - Slow_queries + - Select_scan + - Select_full_join + - Select_full_range_join + # Sorts + - Sort_merge_passes + - Sort_scan + - Sort_range + - Sort_rows + # Table locks + - Table_locks_immediate + - Table_locks_waited + # Server + - Uptime + - Uptime_since_flush_status + AppInfoMysqlVariables: + type: object + properties: + # InnoDB Buffer Pool - critical for memory and caching + innodb_buffer_pool_size: + $ref: '#/components/schemas/String255' + innodb_buffer_pool_instances: + $ref: '#/components/schemas/String255' + # InnoDB Logging + innodb_log_buffer_size: + $ref: '#/components/schemas/String255' + innodb_log_file_size: + $ref: '#/components/schemas/String255' + innodb_redo_log_capacity: + $ref: '#/components/schemas/String255' + # InnoDB I/O and Flushing + innodb_io_capacity: + $ref: '#/components/schemas/String255' + innodb_io_capacity_max: + $ref: '#/components/schemas/String255' + innodb_flush_sync: + $ref: '#/components/schemas/String255' + innodb_flush_log_at_trx_commit: + $ref: '#/components/schemas/String255' + innodb_doublewrite: + $ref: '#/components/schemas/String255' + # InnoDB Locking and Buffering + innodb_lock_wait_timeout: + $ref: '#/components/schemas/String255' + innodb_change_buffering: + $ref: '#/components/schemas/String255' + # Temporary Tables + tmp_table_size: + $ref: '#/components/schemas/String255' + max_heap_table_size: + $ref: '#/components/schemas/String255' + temptable_max_mmap: + $ref: '#/components/schemas/String255' + temptable_max_ram: + $ref: '#/components/schemas/String255' + # Memory Buffers + key_buffer_size: + $ref: '#/components/schemas/String255' + sort_buffer_size: + $ref: '#/components/schemas/String255' + read_buffer_size: + $ref: '#/components/schemas/String255' + read_rnd_buffer_size: + $ref: '#/components/schemas/String255' + join_buffer_size: + $ref: '#/components/schemas/String255' + binlog_cache_size: + $ref: '#/components/schemas/String255' + # Connection and Table Cache + max_connections: + $ref: '#/components/schemas/String255' + max_allowed_packet: + $ref: '#/components/schemas/String255' + thread_cache_size: + $ref: '#/components/schemas/String255' + table_open_cache: + $ref: '#/components/schemas/String255' + table_definition_cache: + $ref: '#/components/schemas/String255' + # Server Version and Query Performance + version: + $ref: '#/components/schemas/Version' + version_compile_machine: + $ref: '#/components/schemas/String255' + version_compile_os: + $ref: '#/components/schemas/String255' + long_query_time: + $ref: '#/components/schemas/String255' + required: + # InnoDB Buffer Pool + - innodb_buffer_pool_size + - innodb_buffer_pool_instances + # InnoDB Logging + - innodb_log_buffer_size + - innodb_log_file_size + # - innodb_redo_log_capacity (8.0.30+ only) + # InnoDB I/O and Flushing + - innodb_io_capacity + - innodb_io_capacity_max + - innodb_flush_sync + - innodb_flush_log_at_trx_commit + - innodb_doublewrite + # InnoDB Locking and Buffering + - innodb_lock_wait_timeout + - innodb_change_buffering + # Temporary Tables + - tmp_table_size + - max_heap_table_size + - temptable_max_mmap + - temptable_max_ram + # Memory Buffers + - key_buffer_size + - sort_buffer_size + - read_buffer_size + - read_rnd_buffer_size + - join_buffer_size + - binlog_cache_size + # Connection and Table Cache + - max_connections + - max_allowed_packet + - thread_cache_size + - table_open_cache + - table_definition_cache + # Server Version and Query Performance + - version + - version_compile_machine + - version_compile_os + - long_query_time + AppInfoMysqlTableStats: + type: object + additionalProperties: + $ref: '#/components/schemas/AppInfoTableInfo' + AppInfoTableInfo: + type: object + properties: + tableRows: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + tableCollation: + $ref: '#/components/schemas/String255' + avgRowLength: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + dataLength: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + indexLength: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + autoIncrement: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + createTime: + $ref: '#/components/schemas/Created' + updateTime: + $ref: '#/components/schemas/StringDateTimeNullable' + rowCount: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + required: + - tableRows + - tableCollation + - avgRowLength + - dataLength + - indexLength + - autoIncrement + - createTime + - rowCount + AppInfoUsers: + type: object + properties: + userInfo: + additionalProperties: + $ref: '#/components/schemas/AppInfoUserInfo' + userPrivilegeCounts: + type: object + additionalProperties: + $ref: '#/components/schemas/AppInfoUserPrivilegeCounts' + required: + - userInfo + - userPrivilegeCounts + AppInfoUserPrivilegeCounts: + type: object + properties: + overall: + $ref: '#/components/schemas/AppInfoPrivilegeTimeSeriesCounts' + activeInLast30Days: + type: object + additionalProperties: + $ref: '#/components/schemas/AppInfoPrivilegeTimeSeriesCounts' + activeInLast90Days: + type: object + additionalProperties: + $ref: '#/components/schemas/AppInfoPrivilegeTimeSeriesCounts' + AppInfoPrivilegeTimeSeriesCounts: + type: object + additionalProperties: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + AppInfoUserInfo: + type: object + properties: + username: + $ref: '#/components/schemas/Username' + created: + $ref: '#/components/schemas/Created' + lastAccess: + $ref: '#/components/schemas/UserLastAccess' + privileges: + $ref: '#/components/schemas/AppInfoUserPrivileges' + roles: + $ref: '#/components/schemas/AppInfoUserRoles' + required: + - username + - created + - lastAccess + - privileges + - roles + AppInfoUserRoles: + type: object + properties: + full: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + owner: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + manage: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + restricted: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + required: + - full + - owner + - manage + - restricted + AppInfoUserPrivileges: + type: array + items: + $ref: '#/components/schemas/String255' + AppInfoRequests: + type: object + properties: + totalRequests: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + totalApiRequests: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + totalRequestDuration: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + operationIds: + additionalProperties: + $ref: '#/components/schemas/AppInfoOperation' + required: + - totalRequests + - totalApiRequests + - totalRequestDuration + - operationIds + AppInfoOperation: + type: object + properties: + totalRequests: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + totalDuration: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + elevatedRequests: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + minDuration: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + maxDuration: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + maxDurationUpdates: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + retried: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + averageRetries: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + totalResLength: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + minResLength: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + maxResLength: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + totalReqLength: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + minReqLength: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + maxReqLength: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + projections: + $ref: '#/components/schemas/AppInfoOperationIdProjections' + clients: + $ref: '#/components/schemas/AppInfoClients' + users: + $ref: '#/components/schemas/AppInfoUserRequests' + errors: + type: object + additionalProperties: + type: integer + format: int64 + minimum: 0 + required: + - totalRequests + - totalDuration + - elevatedRequests + - minDuration + - maxDuration + - maxDurationUpdates + - retried + - averageRetries + - totalResLength + - minResLength + - maxResLength + - clients + - users + - errors + AppInfoClients: + type: object + additionalProperties: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + AppInfoUserRequests: + type: object + additionalProperties: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + AppInfoOperationIdProjections: + type: object + additionalProperties: + $ref: '#/components/schemas/AppInfoOperationIdProjection' + AppInfoOperationIdProjection: + type: object + properties: + statusStats: + type: object + properties: + totalRequests: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + minDuration: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + maxDuration: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + totalDuration: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + retried: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + averageRetries: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + averageDuration: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + required: + - totalRequests + - minDuration + - maxDuration + - totalDuration + - retried + - averageRetries + - averageDuration + AppInfoCollection: + type: object + properties: + name: + $ref: '#/components/schemas/CollectionName' + state: + $ref: '#/components/schemas/AppInfoCollectionState' + settings: + $ref: '#/components/schemas/CollectionSettings' + assets: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + assetsDisabled: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + uniqueStigs: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + stigAssignments: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + rules: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + reviews: + $ref: '#/components/schemas/Integer64MinimumZeroNullable' + reviewsDisabled: + $ref: '#/components/schemas/Integer64MinimumZeroNullable' + assetStigRanges: + $ref: '#/components/schemas/AppInfoAssetStigRanges' + grants: + $ref: '#/components/schemas/AppInfoCollectionGrants' + roleCounts: + $ref: '#/components/schemas/AppInfoCollectionRoleCounts' + labelCounts: + $ref: '#/components/schemas/AppInfoLabelCounts' + required: + - name + - state + - settings + - assets + - assetsDisabled + - uniqueStigs + - stigAssignments + - rules + - reviews + - reviewsDisabled + - assetStigRanges + - grants + - roleCounts + - labelCounts + AppInfoCollectionRoleCounts: + type: object + properties: + restricted: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + full: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + manage: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + owner: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + required: + - restricted + - full + - manage + - owner + AppInfoCollectionGrants: + type: object + additionalProperties: + $ref: '#/components/schemas/AppInfoCollectionGrant' + AppInfoCollectionGrant: + type: object + properties: + role: + $ref: '#/components/schemas/Roles' + grantee: + $ref: '#/components/schemas/AppInfoGrantee' + ruleCounts: + $ref: '#/components/schemas/AppInfoRuleCounts' + uniqueStigs: + type: integer + format: int64 + minimum: 0 + uniqueAssets: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + uniqueStigsDisabled: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + uniqueAssetsDisabled: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + required: + - role + - grantee + - ruleCounts + - uniqueStigs + - uniqueAssets + - uniqueStigsDisabled + - uniqueAssetsDisabled + AppInfoGrantee: + type: object + properties: + userId: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + userGroupId: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + required: + - userId + - userGroupId + AppInfoRuleCounts: + type: object + properties: + r: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + rw: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + none: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + required: + - r + - rw + - none + AppInfoCollectionSettings: + type: object + additionalProperties: false + properties: + fields: + $ref: '#/components/schemas/CollectionFieldSettings' + status: + $ref: '#/components/schemas/CollectionStatusSettings' + history: + $ref: '#/components/schemas/CollectionHistorySettings' + importOptions: + $ref: '#/components/schemas/CollectionImportOptions' + AppInfoCollectionState: + type: string + enum: + - enabled + - disabled + AppInfoLabelCounts: + type: object + properties: + collectionLabels: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + labeledAssets: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + assetLabels: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + required: + - collectionLabels + - labeledAssets + - assetLabels + AppInfoGrantCounts: + type: object + properties: + role1: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + role2: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + role3: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + role4: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + AppInfoRestrictedUsers: + type: object + properties: + uniqueAssets: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + stigAsstCount: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + AppInfoAssetStigRanges: + type: object + properties: + range00: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + range01to05: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + range06to10: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + range11to15: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + range16plus: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + required: + - range00 + - range01to05 + - range06to10 + - range11to15 + - range16plus + Asset: + additionalProperties: false + type: object + properties: + assetId: + $ref: '#/components/schemas/AssetId' + collection: + $ref: '#/components/schemas/CollectionBasic' + description: + $ref: '#/components/schemas/AssetDescription' + fqdn: + $ref: '#/components/schemas/AssetFqdn' + ip: + $ref: '#/components/schemas/AssetIp' + labelIds: + type: array + items: + $ref: '#/components/schemas/LabelId' + mac: + $ref: '#/components/schemas/AssetMac' + metadata: + $ref: '#/components/schemas/Metadata' + name: + $ref: '#/components/schemas/AssetName' + noncomputing: + $ref: '#/components/schemas/AssetNoncomputing' + required: + - assetId + - name + - fqdn + - collection + - description + - ip + - mac + - noncomputing + AssetBasic: + additionalProperties: false + type: object + properties: + assetId: + $ref: '#/components/schemas/AssetId' + name: + $ref: '#/components/schemas/AssetName' + required: + - assetId + - name + AssetBasicProjected: + additionalProperties: false + type: object + properties: + assetId: + $ref: '#/components/schemas/AssetId' + assetLabelIds: + items: + $ref: '#/components/schemas/LabelId' + type: array + assetLabels: + type: array + items: + $ref: '#/components/schemas/LabelBasicWithColor' + collectionId: + $ref: '#/components/schemas/CollectionId' + name: + $ref: '#/components/schemas/AssetName' + access: + $ref: '#/components/schemas/AclRuleAccess' + required: + - assetId + - name + AssetCount: + minimum: 0 + type: integer + AssetCreateBatch: + type: array + items: + $ref: '#/components/schemas/AssetBatchItem' + minItems: 1 + AssetBatchItem: + additionalProperties: false + type: object + properties: + description: + $ref: '#/components/schemas/AssetDescription' + fqdn: + $ref: '#/components/schemas/AssetFqdn' + ip: + $ref: '#/components/schemas/AssetIp' + labelNames: + items: + $ref: '#/components/schemas/LabelName' + type: array + mac: + $ref: '#/components/schemas/AssetMac' + metadata: + $ref: '#/components/schemas/Metadata' + name: + $ref: '#/components/schemas/AssetName' + noncomputing: + $ref: '#/components/schemas/AssetNoncomputing' + stigs: + description: The benchmarkIds mapped to this Asset + items: + type: string + type: array + required: + - name + - description + - ip + - noncomputing + - metadata + - stigs + AssetCreateOrReplace: + additionalProperties: false + type: object + properties: + collectionId: + $ref: '#/components/schemas/CollectionId' + description: + $ref: '#/components/schemas/AssetDescription' + fqdn: + $ref: '#/components/schemas/AssetFqdn' + ip: + $ref: '#/components/schemas/AssetIp' + labelNames: + items: + $ref: '#/components/schemas/LabelName' + type: array + mac: + $ref: '#/components/schemas/AssetMac' + metadata: + $ref: '#/components/schemas/Metadata' + name: + $ref: '#/components/schemas/AssetName' + noncomputing: + $ref: '#/components/schemas/AssetNoncomputing' + stigs: + description: The benchmarkIds mapped to this Asset + items: + type: string + type: array + required: + - name + - collectionId + - description + - ip + - noncomputing + - metadata + - stigs + AssetDescription: + $ref: '#/components/schemas/String255Nullable' + AssetForCollection: + additionalProperties: false + type: object + properties: + assetId: + $ref: '#/components/schemas/AssetId' + name: + $ref: '#/components/schemas/AssetName' + AssetFqdn: + $ref: '#/components/schemas/String255Nullable' + AssetId: + $ref: '#/components/schemas/StringIntId' + AssetIp: + $ref: '#/components/schemas/String255Nullable' + AssetMac: + $ref: '#/components/schemas/String255Nullable' + AssetName: + $ref: '#/components/schemas/String255' + AssetNoncomputing: + type: boolean + AssetProjected: + additionalProperties: false + type: object + properties: + assetId: + $ref: '#/components/schemas/AssetId' + collection: + $ref: '#/components/schemas/CollectionBasic' + description: + $ref: '#/components/schemas/AssetDescription' + fqdn: + $ref: '#/components/schemas/AssetFqdn' + ip: + $ref: '#/components/schemas/AssetIp' + labelIds: + type: array + items: + $ref: '#/components/schemas/LabelId' + labels: + type: array + items: + $ref: '#/components/schemas/LabelBasicWithColor' + mac: + $ref: '#/components/schemas/AssetMac' + metadata: + $ref: '#/components/schemas/Metadata' + name: + $ref: '#/components/schemas/AssetName' + noncomputing: + $ref: '#/components/schemas/AssetNoncomputing' + statusStats: + additionalProperties: false + type: object + properties: + acceptedCount: + nullable: true + type: integer + maxTs: + $ref: '#/components/schemas/MaxTs' + minTs: + $ref: '#/components/schemas/MinTs' + rejectedCount: + nullable: true + type: integer + ruleCount: + $ref: '#/components/schemas/RuleCount' + savedCount: + nullable: true + type: integer + stigCount: + type: integer + submittedCount: + nullable: true + type: integer + stigs: + type: array + description: The benchmarkIds mapped to this Asset + items: + $ref: '#/components/schemas/CollectionStig' + required: + - assetId + - name + - fqdn + - collection + - description + - ip + - mac + - noncomputing + - labelIds + AssetStigResponse: + additionalProperties: false + type: object + properties: + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + revisionDate: + $ref: '#/components/schemas/RevisionDate' + revisionStr: + $ref: '#/components/schemas/RevisionStrRaw' + ruleCount: + $ref: '#/components/schemas/RuleCount' + required: + - benchmarkId + - revisionStr + - revisionDate + - ruleCount + AssetStigSelection: + additionalProperties: false + type: object + description: > + An array that specifies a list of Assets/STIG items. + + + Each array item is an object that MUST include the property `assetId` + and MAY include the property `stigs`. + + + If the `stigs` property is absent, the default value of the property is + used. The default value is an array of the default revisions of each + STIG to which the requesting User + + has been granted access on the Asset. + + + If the `stigs` property is present, the value MUST be an array. Each + array member is EITHER: + + - an object that identifies both a `benchmarkId` and a specific + `revisionStr` + + - a string whose value is a `benchmarkId`. This is equivalent to + specifying the object {"benchmarkId": [provided benchmarkId], + "revisionStr": [default revisionStr for the provided benchmarkId]} + properties: + assetId: + $ref: '#/components/schemas/AssetId' + stigs: + maxItems: 30 + minItems: 1 + type: array + uniqueItems: true + items: + oneOf: + - $ref: '#/components/schemas/RevisionBasic' + - $ref: '#/components/schemas/String255' + required: + - assetId + AssetUpdate: + additionalProperties: false + type: object + properties: + collectionId: + $ref: '#/components/schemas/CollectionId' + description: + $ref: '#/components/schemas/AssetDescription' + fqdn: + $ref: '#/components/schemas/AssetFqdn' + ip: + $ref: '#/components/schemas/AssetIp' + labelNames: + type: array + items: + $ref: '#/components/schemas/LabelName' + mac: + $ref: '#/components/schemas/AssetMac' + metadata: + $ref: '#/components/schemas/Metadata' + name: + $ref: '#/components/schemas/AssetName' + noncomputing: + $ref: '#/components/schemas/AssetNoncomputing' + stigs: + description: The benchmarkIds mapped to this Asset + type: array + items: + $ref: '#/components/schemas/BenchmarkId' + AssetsPatchRequest: + additionalProperties: false + type: object + properties: + assetIds: + type: array + minItems: 1 + items: + $ref: '#/components/schemas/AssetId' + operation: + type: string + enum: + - delete + required: + - assetIds + - operation + AssetsPatchResponse: + additionalProperties: false + type: object + properties: + assetIds: + type: array + items: + $ref: '#/components/schemas/AssetId' + operation: + type: string + enum: + - deleted + Attribution: + type: object + properties: + userId: + $ref: '#/components/schemas/UserId' + username: + $ref: '#/components/schemas/Username' + ts: + $ref: '#/components/schemas/StringDateTime' + Attributions: + type: object + properties: + created: + $ref: '#/components/schemas/Attribution' + modified: + $ref: '#/components/schemas/Attribution' + BenchmarkId: + $ref: '#/components/schemas/String255Nullable' + Cci: + additionalProperties: false + type: object + properties: + cci: + $ref: '#/components/schemas/CciString' + contributor: + type: string + definition: + $ref: '#/components/schemas/DefinitionString' + emassAp: + $ref: '#/components/schemas/EmassAp' + publishdate: + $ref: '#/components/schemas/StringDateTime' + references: + type: array + items: + $ref: '#/components/schemas/CciReferenceItem' + status: + $ref: '#/components/schemas/CciStatus' + stigs: + items: + $ref: '#/components/schemas/RevisionBasic' + type: array + type: + $ref: '#/components/schemas/CciType' + CciBasic: + additionalProperties: false + type: object + properties: + apAcronym: + $ref: '#/components/schemas/ApAcronym' + cci: + $ref: '#/components/schemas/CciString' + control: + nullable: true + type: string + definition: + $ref: '#/components/schemas/DefinitionString' + required: + - cci + - apAcronym + - definition + - control + CciListItem: + additionalProperties: false + type: object + properties: + cci: + $ref: '#/components/schemas/CciString' + references: + type: array + items: + $ref: '#/components/schemas/CciReferenceItem' + type: + $ref: '#/components/schemas/CciType' + CciLocation: + $ref: '#/components/schemas/String255' + CciReferenceItem: + additionalProperties: false + type: object + properties: + creator: + type: string + indexDisa: + $ref: '#/components/schemas/IndexDisa' + location: + $ref: '#/components/schemas/CciLocation' + parentControl: + $ref: '#/components/schemas/ParentControl' + textRefNist: + $ref: '#/components/schemas/TextRefNist' + title: + $ref: '#/components/schemas/CciString' + version: + $ref: '#/components/schemas/VersionString' + CciStatus: + $ref: '#/components/schemas/String20' + CciString: + $ref: '#/components/schemas/String255' + CciType: + $ref: '#/components/schemas/String20' + Check: + additionalProperties: false + type: object + properties: + content: + type: string + system: + type: string + ChecklistAssetStig: + type: array + items: + additionalProperties: false + type: object + properties: + assetId: + $ref: '#/components/schemas/AssetId' + autoResult: + type: boolean + comment: + $ref: '#/components/schemas/CommentaryStringNullable' + detail: + $ref: '#/components/schemas/CommentaryStringNullable' + groupId: + $ref: '#/components/schemas/GroupId' + groupTitle: + $ref: '#/components/schemas/GroupTitle' + result: + $ref: '#/components/schemas/ChecklistResult' + resultEngine: + $ref: '#/components/schemas/ResultEngine' + rule: + $ref: '#/components/schemas/RuleProjected' + ruleId: + $ref: '#/components/schemas/RuleId' + ruleTitle: + $ref: '#/components/schemas/RuleTitle' + severity: + $ref: '#/components/schemas/RuleSeverity' + status: + $ref: '#/components/schemas/ChecklistStatus' + statusTs: + $ref: '#/components/schemas/StringDateTimeNullable' + touchTs: + $ref: '#/components/schemas/StringDateTimeNullable' + ts: + $ref: '#/components/schemas/StringDateTimeNullable' + version: + $ref: '#/components/schemas/VersionString' + ChecklistCkl: + additionalProperties: false + description: The CKL format generated and read by DISA STIG Viewer + type: object + properties: + ASSET: + type: object + additionalProperties: false + properties: + ASSET_TYPE: + type: string + HOST_FQDN: + type: string + HOST_GUID: + type: string + HOST_IP: + type: string + HOST_MAC: + type: string + HOST_NAME: + type: string + TARGET_KEY: + type: string + TECH_AREA: + type: string + STIGS: + type: object + additionalProperties: false + properties: + iSTIG: + type: array + items: + type: object + properties: + STIG_INFO: + type: array + items: + type: object + properties: + SI_DATA: + type: object + properties: + SID_DATA: + type: string + SID_NAME: + type: string + VULN: + type: array + items: + type: object + additionalProperties: false + properties: + COMMENTS: + type: string + FINDING_DETAILS: + type: string + SEVERITY_JUSTIFICATION: + type: string + SEVERITY_OVERRIDE: + type: string + STATUS: + type: string + enum: + - Open + - NotAFinding + - Not_Applicable + - Not_Reviewed + STIG_DATA: + type: array + items: + type: object + properties: + ATTRIBUTE_DATA: + type: string + VULN_ATTRIBUTE: + type: string + xml: + name: CHECKLIST + ChecklistCklb: + additionalProperties: false + description: The CKLB format generated and read by DISA STIG VIewer 3 + type: object + properties: + title: + type: string + id: + type: string + format: uuid + active: + type: boolean + mode: + type: integer + has_path: + type: boolean + target_data: + $ref: '#/components/schemas/TargetData' + stigs: + type: array + items: + $ref: '#/components/schemas/StigCklb' + ChecklistJsonAccess: + type: object + properties: + access: + $ref: '#/components/schemas/AclRuleAccess' + checklist: + $ref: '#/components/schemas/ChecklistAssetStig' + TargetData: + type: object + properties: + target_type: + type: string + host_name: + $ref: '#/components/schemas/AssetName' + ip_address: + $ref: '#/components/schemas/AssetIp' + mac_address: + $ref: '#/components/schemas/AssetMac' + fqdn: + $ref: '#/components/schemas/AssetFqdn' + comments: + type: string + role: + type: string + is_web_database: + type: boolean + technology_area: + type: string + web_db_site: + type: string + web_db_instance: + type: string + StigCklb: + type: object + properties: + stig_name: + type: string + display_name: + type: string + stig_id: + type: string + version: + type: string + release_info: + type: string + uuid: + type: string + format: uuid + reference_identifier: + type: string + size: + type: integer + rules: + type: array + items: + $ref: '#/components/schemas/Rule' + Rule: + type: object + properties: + uuid: + type: string + format: uuid + stig_uuid: + type: string + format: uuid + target_key: + type: string + nullable: true + stig_ref: + type: string + nullable: true + group_id: + type: string + rule_id: + type: string + rule_id_src: + type: string + weight: + type: string + classification: + type: string + severity: + type: string + rule_version: + type: string + group_title: + type: string + rule_title: + type: string + fix_text: + type: string + false_positives: + type: string + nullable: true + false_negatives: + type: string + nullable: true + discussion: + type: string + check_content: + type: string + documentable: + type: string + mitigations: + type: string + nullable: true + potential_impacts: + type: string + nullable: true + third_party_tools: + type: string + nullable: true + mitigation_control: + type: string + nullable: true + responsibility: + type: string + nullable: true + security_override_guidance: + type: string + nullable: true + ia_controls: + type: string + nullable: true + check_content_ref: + type: object + properties: + href: + type: string + name: + type: string + legacy_ids: + type: array + items: + type: string + group_tree: + type: array + items: + $ref: '#/components/schemas/GroupTree' + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + STIGUuid: + type: string + format: uuid + status: + type: string + overrides: + type: object + comments: + type: string + finding_details: + type: string + ccis: + type: array + items: + type: string + GroupTree: + type: object + properties: + id: + type: string + title: + type: string + description: + type: string + ChecklistCollectionCounts: + additionalProperties: false + type: object + properties: + results: + type: object + additionalProperties: false + properties: + fail: + type: integer + notapplicable: + type: integer + other: + type: integer + pass: + type: integer + statuses: + additionalProperties: false + type: object + properties: + accepted: + type: integer + rejected: + type: integer + saved: + type: integer + submitted: + type: integer + ChecklistCollectionStig: + additionalProperties: false + type: object + properties: + counts: + $ref: '#/components/schemas/ChecklistCollectionCounts' + groupId: + $ref: '#/components/schemas/GroupId' + groupTitle: + $ref: '#/components/schemas/GroupTitle' + ruleId: + $ref: '#/components/schemas/RuleId' + ruleTitle: + $ref: '#/components/schemas/RuleTitle' + severity: + $ref: '#/components/schemas/RuleSeverity' + timestamps: + additionalProperties: false + type: object + properties: + statusTs: + $ref: '#/components/schemas/ChecklistCollectionStigTimestamps' + touchTs: + $ref: '#/components/schemas/ChecklistCollectionStigTimestamps' + ts: + $ref: '#/components/schemas/ChecklistCollectionStigTimestamps' + version: + $ref: '#/components/schemas/VersionString' + ChecklistCollectionStigTimestamp: + $ref: '#/components/schemas/StringDateTimeNullable' + ChecklistCollectionStigTimestamps: + additionalProperties: false + type: object + properties: + max: + $ref: '#/components/schemas/ChecklistCollectionStigTimestamp' + min: + $ref: '#/components/schemas/ChecklistCollectionStigTimestamp' + ChecklistResult: + description: The Review result + type: string + nullable: true + enum: + - fail + - pass + - notapplicable + - notchecked + - unknown + - error + - notselected + - informational + - fixed + - null + ChecklistResultUnreviewed: + description: The Review result + type: string + enum: + - notchecked + - unknown + - error + - notselected + - informational + - fixed + - null + nullable: true + ChecklistStatus: + type: string + nullable: true + enum: + - saved + - submitted + - accepted + - rejected + - null + ChecklistXccdf: + additionalProperties: true + type: object + description: > + An XCCDF document with TestResult. Note: OAS 3.x cannot represent the + actual XML schema + xml: + name: Benchmark + namespace: http://checklists.nist.gov/xccdf/1.2 + ClientErrorBadAssetPost: + additionalProperties: false + type: object + properties: + code: + type: string + enum: + - "422" + nullable: true + error: + type: string + detail: + type: array + items: + type: object + properties: + failure: + type: string + detail: + type: object + properties: + name: + type: string + assetIndex: + type: integer + benchmarkId: + type: string + benchmarkIdIndex: + type: integer + labelName: + type: string + labelIndex: + type: integer + required: + - error + - detail + ClientErrorDuplicateCollection: + additionalProperties: false + type: object + properties: + code: + type: string + enum: + - "400" + data: + $ref: '#/components/schemas/Collection' + message: + type: string + enum: + - Duplicate name + Collection: + additionalProperties: false + type: object + properties: + collectionId: + $ref: '#/components/schemas/CollectionId' + created: + $ref: '#/components/schemas/Created' + description: + $ref: '#/components/schemas/CollectionDescription' + metadata: + $ref: '#/components/schemas/Metadata' + name: + $ref: '#/components/schemas/CollectionName' + settings: + $ref: '#/components/schemas/CollectionSettings' + required: + - collectionId + - name + - description + - settings + - metadata + - created + CollectionBasic: + additionalProperties: false + type: object + properties: + collectionId: + $ref: '#/components/schemas/CollectionId' + name: + $ref: '#/components/schemas/CollectionName' + CollectionCloneOptions: + additionalProperties: false + type: object + properties: + assets: + type: boolean + default: true + description: >- + Clone the source Collection's Assets and their core properties. If + this option is not enabled then the stagMappings and pinRevisions + options are ignored. + grants: + default: true + type: boolean + description: >- + Clone the source Collection's users and their grants. Whether this + option is enabled or not, the creator of the cloned Collection (ie. + you) will be given an Owner grant in the clone. + labels: + type: boolean + default: true + description: >- + Clone the source Collection's available labels. You must enable this + option AND the assets option for labels to be mapped to Assets in + the clone. + pinRevisions: + default: matchSource + type: string + description: > + matchSource: STIGs in the source Collection that are pinned + to a specific Revision will be pinned to that Revision in the clone. + STIGs that track the latest Revision (unpinned) in the source will + be unpinned in the clone.

sourceDefaults: All STIGs in + the clone will be pinned to a specific Revision. STIGs that are + pinned to a specific Revision in the source Collection will be + pinned to that Revision in the clone. STIGs that track the latest + Revision in the source will be pinned to the current latest Revision + in the clone. + enum: + - matchSource + - sourceDefaults + + stigMappings: + default: withReviews + type: string + description: > + withReviews: Assets will be cloned with their current STIG + assignments and ALL stored Reviews. This will include Reviews that + are no longer associated with a current STIG assignment or are + associated with a non-default Revision of a + STIG.

withoutReviews: Assets will be cloned with their + current STIG assignments but NO stored Reviews will be cloned. All + Metrics will be set to zero.

none: Assets will be + cloned with only their core properties and no STIG assignments or + Reviews. The pinRevisions option will be ignored. + enum: + - none + - withReviews + - withoutReviews + CollectionCloneRequest: + additionalProperties: false + type: object + properties: + description: + $ref: '#/components/schemas/CollectionDescription' + name: + $ref: '#/components/schemas/CollectionName' + options: + $ref: '#/components/schemas/CollectionCloneOptions' + required: + - name + - description + CollectionCloneResponse: + description: > + The response body is a stream of newline-delimited JSON (NDJSON) objects + reporting the progress of the (possibly long running) cloning process. + Each object conforms to this schema, but not all objects will have every + property.

The sequence of objects starts with multiple + {"stage": "collection"} objects, optionally followed by multiple + {"stage": "reviews"} objects if review cloning is requested, and + concludes with one {"stage": "result"} object whose "collection" + property value conforms to the CollectionProjected schema for the + created Collection.

Success is indicated when the final + {"stage": "result"} message is sent. Errors that prevent cloning from + completing are reported with {"status": "error"} and the "result" stage + is not reported. Note that the endpoint will return HTTP status 200 + immediately after the request is validated and the cloning process has + started, so you should not rely on status 200 for indication of cloning + success. + type: object + properties: + collection: + $ref: '#/components/schemas/CollectionProjected' + error: + type: object + message: + type: string + stack: + type: string + stage: + enum: + - collection + - reviews + - result + type: string + status: + enum: + - running + - finished + - error + type: string + step: + type: integer + stepCount: + type: integer + stepName: + type: string + CollectionCreateOrReplace: + additionalProperties: false + type: object + properties: + description: + $ref: '#/components/schemas/CollectionDescription' + grants: + type: array + items: + anyOf: + - $ref: '#/components/schemas/UserGrant' + - $ref: '#/components/schemas/UserGroupGrant' + labels: + type: array + items: + $ref: '#/components/schemas/LabelCreate' + + metadata: + $ref: '#/components/schemas/Metadata' + name: + $ref: '#/components/schemas/CollectionName' + settings: + $ref: '#/components/schemas/CollectionSettings' + required: + - name + - grants + CollectionDescription: + $ref: '#/components/schemas/String255Nullable' + CollectionExportToResponse: + description: > + The response body is a stream of newline-delimited JSON (NDJSON) objects + reporting the progress of the (possibly long running) export process. + Each object conforms to this schema, but not all objects will have every + property.

The sequence of objects starts with multiple + {"stage": "prepare"} objects, followed by multiple {"stage": "assets"} + objects, multiple {"stage": "reviews"} objects, and multiple {"stage": + "metrics"} objects. The stream concludes with one {"stage": "commit"} + object and then one {"stage": "result"} object whose "counts" property + value conforms to the schema below.

Success is indicated when + the final {"stage": "result"} message is sent. Errors that prevent + exporting from completing are reported with {"status": "error"} and the + "result" stage is not reported. Note that the endpoint will return HTTP + status 200 immediately after the request is validated and the export + process has started, so you should not rely on status 200 for indication + of export success. + type: object + properties: + counts: + additionalProperties: false + type: object + properties: + assetsCreated: + type: integer + reviewsInserted: + type: integer + reviewsUpdated: + type: integer + stigsMapped: + type: integer + error: + type: object + message: + type: string + stack: + type: string + stage: + enum: + - prepare + - assets + - reviews + - metrics + - result + type: string + status: + enum: + - running + - error + type: string + step: + type: integer + stepCount: + type: integer + stepName: + type: string + CollectionFieldEnabledAlways: + additionalProperties: false + type: object + properties: + enabled: + type: string + enum: + - always + required: + type: string + enum: + - always + - findings + - optional + required: + - enabled + - required + CollectionFieldEnabledFindings: + additionalProperties: false + type: object + properties: + enabled: + type: string + enum: + - findings + required: + type: string + enum: + - findings + - optional + required: + - enabled + - required + CollectionFieldSetting: + type: object + example: + enabled: always + required: findings + oneOf: + - $ref: '#/components/schemas/CollectionFieldEnabledAlways' + - $ref: '#/components/schemas/CollectionFieldEnabledFindings' + CollectionFieldSettings: + additionalProperties: false + type: object + properties: + comment: + $ref: '#/components/schemas/CollectionFieldSetting' + detail: + $ref: '#/components/schemas/CollectionFieldSetting' + required: + - detail + - comment + CollectionGrant: + additionalProperties: false + type: object + properties: + roleId: + $ref: '#/components/schemas/RoleId' + collectionId: + $ref: '#/components/schemas/CollectionId' + required: + - collectionId + - roleId + CollectionGrantProjected: + additionalProperties: false + type: object + properties: + roleId: + $ref: '#/components/schemas/RoleId' + collection: + type: object + properties: + collectionId: + $ref: '#/components/schemas/CollectionId' + name: + $ref: '#/components/schemas/CollectionName' + grantees: + $ref: '#/components/schemas/Grantees' + CollectionHistorySettings: + additionalProperties: false + type: object + properties: + maxReviews: + example: 5 + maximum: 15 + minimum: 0 + type: integer + required: + - maxReviews + CollectionId: + $ref: '#/components/schemas/StringIntId' + CollectionImportOptions: + additionalProperties: false + type: object + properties: + autoStatus: + $ref: '#/components/schemas/CollectionImportAutoStatus' + unreviewed: + description: | + Controls how to handle unreviewed rules (those with result = 'notchecked'). + - 'never': Don't import unreviewed rules + - 'commented': Import unreviewed rules that have comments, using the result specified in unreviewedCommented + - 'always': Import all unreviewed rules, using the result specified in unreviewedCommented for those with comments + type: string + enum: + - never + - commented + - always + unreviewedCommented: + description: | + The result to use for unreviewed rules that have comments, when unreviewed is set to 'commented' or 'always'. + type: string + enum: + - notchecked + - informational + emptyDetail: + description: | + Controls how to handle rules with empty finding details. + - 'ignore': Leave the detail field null + - 'import': Import the empty detail (as an empty string) + - 'replace': Replace with a default message + type: string + enum: + - ignore + - import + - replace + emptyComment: + description: | + Controls how to handle rules with empty comments. + - 'ignore': Leave the comment field null + - 'import': Import the empty comment (as an empty string) + - 'replace': Replace with a default message + type: string + enum: + - ignore + - import + - replace + updateAssetProps: + description: | + Flag indicating whether to update Asset information (IP, MAC, FQDN, noncomputing, and metadata including role and tech area) when Asset already exists in the Collection. + type: boolean + allowCustom: + description: | + Flag indicating whether Clients may POST reviews that do not conform to importOptions specified. + type: boolean + required: + - autoStatus + - unreviewed + - unreviewedCommented + - emptyDetail + - emptyComment + - allowCustom + CollectionImportAutoStatus: + type: object + additionalProperties: false + description: | + Determines how to set the status property of imported reviews for each evaluation result. + Each property must be one of: + - 'null': Don't set a status (Keep existing Review Status) + - 'saved': Always set status to 'saved' + - 'submitted': Set status to 'submitted' if the review is submittable per Collection settings + - 'accepted': Set status to 'accepted' if the review is submittable, and User has permission to accept, otherwise 'submitted' + properties: + fail: + $ref: '#/components/schemas/ReviewStatusOption' + notapplicable: + $ref: '#/components/schemas/ReviewStatusOption' + pass: + $ref: '#/components/schemas/ReviewStatusOption' + required: + - fail + - notapplicable + - pass + CollectionName: + $ref: '#/components/schemas/String45' + CollectionProjected: + additionalProperties: false + type: object + properties: + assets: + type: array + items: + $ref: '#/components/schemas/AssetForCollection' + collectionId: + $ref: '#/components/schemas/CollectionId' + description: + $ref: '#/components/schemas/CollectionDescription' + grants: + type: array + items: + anyOf: + - $ref: '#/components/schemas/UserGrantProjected' + - $ref: '#/components/schemas/UserGroupGrantProjected' + users: + type: array + items: + $ref: '#/components/schemas/GrantEffective' + labels: + type: array + items: + $ref: '#/components/schemas/Label' + metadata: + $ref: '#/components/schemas/Metadata' + name: + $ref: '#/components/schemas/CollectionName' + owners: + type: array + items: + $ref: '#/components/schemas/Owner' + settings: + $ref: '#/components/schemas/CollectionSettings' + statistics: + $ref: '#/components/schemas/CollectionStatistics' + stigs: + type: array + items: + $ref: '#/components/schemas/CollectionStig' + required: + - collectionId + - name + - description + - settings + - metadata + CollectionSettings: + additionalProperties: false + type: object + properties: + fields: + $ref: '#/components/schemas/CollectionFieldSettings' + history: + $ref: '#/components/schemas/CollectionHistorySettings' + status: + $ref: '#/components/schemas/CollectionStatusSettings' + importOptions: + $ref: '#/components/schemas/CollectionImportOptions' + CollectionSettingsRequired: + additionalProperties: false + type: object + properties: + fields: + $ref: '#/components/schemas/CollectionFieldSettings' + history: + $ref: '#/components/schemas/CollectionHistorySettings' + status: + $ref: '#/components/schemas/CollectionStatusSettings' + importOptions: + $ref: '#/components/schemas/CollectionImportOptions' + required: + - fields + - history + - status + - importOptions + CollectionStatistics: + additionalProperties: false + type: object + properties: + assetCount: + $ref: '#/components/schemas/AssetCount' + checklistCount: + type: integer + created: + $ref: '#/components/schemas/Created' + userCount: + type: integer + required: + - created + - assetCount + - userCount + - checklistCount + CollectionStatusCount: + additionalProperties: false + type: object + properties: + resultEngine: + type: integer + total: + type: integer + required: + - total + - resultEngine + CollectionStatusSettings: + additionalProperties: false + type: object + properties: + canAccept: + type: boolean + minAcceptGrant: + type: integer + example: 2 + maximum: 4 + minimum: 2 + resetCriteria: + type: string + example: result + enum: + - any + - result + required: + - canAccept + - minAcceptGrant + - resetCriteria + CollectionStig: + additionalProperties: false + type: object + properties: + benchmarkDate: + $ref: '#/components/schemas/StringDateNullable' + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + revisionPinned: + type: boolean + revisionStr: + $ref: '#/components/schemas/RevisionStr' + ruleCount: + $ref: '#/components/schemas/RuleCount' + required: + - benchmarkId + - revisionStr + - benchmarkDate + - revisionPinned + - ruleCount + CollectionStigWithAssetCount: + additionalProperties: false + type: object + properties: + assetCount: + $ref: '#/components/schemas/AssetCount' + assets: + items: + $ref: '#/components/schemas/AssetForCollection' + type: array + benchmarkDate: + $ref: '#/components/schemas/StringDateNullable' + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + revisionPinned: + type: boolean + revisionStr: + $ref: '#/components/schemas/RevisionStr' + ruleCount: + $ref: '#/components/schemas/RuleCount' + title: + $ref: '#/components/schemas/StatusText' + required: + - benchmarkId + - revisionStr + - benchmarkDate + - revisionPinned + - ruleCount + - assetCount + CollectionStigWithIsDefault: + additionalProperties: false + type: object + properties: + benchmarkDate: + $ref: '#/components/schemas/StringDateNullable' + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + isDefault: + type: boolean + revisionPinned: + type: boolean + revisionStr: + $ref: '#/components/schemas/RevisionStr' + ruleCount: + $ref: '#/components/schemas/RuleCount' + required: + - benchmarkId + - revisionStr + - benchmarkDate + - revisionPinned + - ruleCount + - isDefault + CollectionUpdate: + type: object + additionalProperties: false + minProperties: 1 + properties: + description: + $ref: '#/components/schemas/CollectionDescription' + grants: + type: array + items: + type: object + properties: + roleId: + $ref: '#/components/schemas/RoleId' + userId: + $ref: '#/components/schemas/UserId' + labels: + type: array + items: + $ref: '#/components/schemas/LabelCreate' + metadata: + $ref: '#/components/schemas/Metadata' + name: + $ref: '#/components/schemas/CollectionName' + settings: + $ref: '#/components/schemas/CollectionSettingsRequired' + CollectionsProjected: + additionalProperties: false + type: object + properties: + collectionId: + $ref: '#/components/schemas/CollectionId' + description: + $ref: '#/components/schemas/CollectionDescription' + metadata: + $ref: '#/components/schemas/Metadata' + name: + $ref: '#/components/schemas/CollectionName' + owners: + type: array + items: + $ref: '#/components/schemas/Owner' + settings: + $ref: '#/components/schemas/CollectionSettings' + statistics: + $ref: '#/components/schemas/CollectionStatistics' + required: + - collectionId + - name + - description + - settings + - metadata + CommentaryString: + $ref: '#/components/schemas/String32767' + CommentaryStringNullable: + $ref: '#/components/schemas/String32767Nullable' + CommitBranch: + type: string + CommitDescribe: + type: string + CommitObject: + type: object + additionalProperties: false + properties: + branch: + $ref: '#/components/schemas/CommitBranch' + describe: + $ref: '#/components/schemas/CommitDescribe' + sha: + $ref: '#/components/schemas/CommitSha' + tag: + $ref: '#/components/schemas/CommitTag' + CommitSha: + type: string + CommitTag: + type: string + Created: + $ref: '#/components/schemas/StringDateTime' + DefinitionString: + nullable: true + type: string + Detail: + type: object + properties: + assetStig: + type: array + items: + $ref: '#/components/schemas/DetailAssetStig' + dbInfo: + $ref: '#/components/schemas/DetailMySqlInfo' + DetailAssetStig: + additionalProperties: false + type: object + properties: + assetCnt: + type: integer + collectionId: + $ref: '#/components/schemas/CollectionId' + range01to05: + type: integer + range06to10: + type: integer + range11to15: + type: integer + range16plus: + type: integer + DetailMySqlInfo: + type: object + properties: + tables: + type: object + additionalProperties: + $ref: '#/components/schemas/DetailMySqlTableInfo' + DetailMySqlTableInfo: + additionalProperties: false + type: object + properties: + autoIncrement: + nullable: true + type: integer + avgRowLength: + nullable: true + type: integer + createTime: + $ref: '#/components/schemas/StringDateTimeNullable' + dataLength: + nullable: true + type: integer + indexLength: + nullable: true + type: integer + maxDataLength: + nullable: true + type: integer + tableCollation: + nullable: true + type: string + tableName: + type: string + tableRows: + nullable: true + type: integer + updateTime: + $ref: '#/components/schemas/StringDateTimeNullable' + Dependencies: + type: object + properties: + db: + type: boolean + oidc: + type: boolean + DisplayName: + $ref: '#/components/schemas/String255Nullable' + EffectiveAcl: + additionalProperties: false + type: object + properties: + access: + $ref: '#/components/schemas/AclRuleAccess' + asset: + $ref: '#/components/schemas/AssetBasic' + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + aclSources: + type: array + items: + $ref: '#/components/schemas/AclSource' + EmassAp: + additionalProperties: false + type: object + nullable: true + properties: + apAcronym: + $ref: '#/components/schemas/ApAcronym' + assessmentProcedure: + type: string + implementation: + type: string + Endpoints: + additionalProperties: false + type: object + properties: + ui: + type: string + Error: + type: object + properties: + detail: + type: string + error: + type: string + stack: + type: string + FindingProjected: + additionalProperties: false + type: object + properties: + apAcronym: + $ref: '#/components/schemas/ApAcronym' + assetCount: + $ref: '#/components/schemas/AssetCount' + assets: + type: array + items: + $ref: '#/components/schemas/AssetBasic' + cci: + nullable: true + type: string + ccis: + type: array + minItems: 0 + items: + $ref: '#/components/schemas/CciBasic' + definition: + $ref: '#/components/schemas/DefinitionString' + groupId: + $ref: '#/components/schemas/GroupId' + groups: + type: array + items: + $ref: '#/components/schemas/GroupProjected' + ruleId: + $ref: '#/components/schemas/RuleId' + rules: + type: array + items: + $ref: '#/components/schemas/RuleAbbr' + severity: + $ref: '#/components/schemas/RuleSeverity' + stigs: + type: array + items: + $ref: '#/components/schemas/CollectionStig' + title: + $ref: '#/components/schemas/RuleTitle' + Fix: + additionalProperties: false + type: object + properties: + fixref: + type: string + text: + type: string + Grant: + oneOf: + - $ref: '#/components/schemas/UserGrantProjected' + - $ref: '#/components/schemas/UserGroupGrantProjected' + GrantPost: + oneOf: + - $ref: '#/components/schemas/UserGrant' + - $ref: '#/components/schemas/UserGroupGrant' + GrantEffective: + type: object + properties: + roleId: + $ref: '#/components/schemas/RoleId' + grantees: + $ref: '#/components/schemas/Grantees' + user: + $ref: '#/components/schemas/UserBasicWithDisplayName' + required: + - roleId + - grantees + - user + Grantee: + oneOf: + - $ref: '#/components/schemas/UserBasic' + - $ref: '#/components/schemas/UserGroupBasic' + Grantees: + type: array + items: + $ref: '#/components/schemas/Grantee' + GrantId: + $ref: '#/components/schemas/StringIntId' + GroupId: + $ref: '#/components/schemas/String255Nullable' + GroupProjected: + additionalProperties: false + type: object + properties: + groupId: + $ref: '#/components/schemas/GroupId' + rules: + type: array + items: + $ref: '#/components/schemas/RuleAbbr' + severity: + $ref: '#/components/schemas/RuleSeverity' + title: + $ref: '#/components/schemas/GroupTitle' + GroupTitle: + $ref: '#/components/schemas/String255Nullable' + IndexDisa: + $ref: '#/components/schemas/String255' + IntegerMinimumZeroNullable: + type: integer + minimum: 0 + nullable: true + Integer64MinimumZero: + type: integer + format: int64 + minimum: 0 + Integer64MinimumZeroNullable: + type: integer + format: int64 + minimum: 0 + nullable: true + Job: + additionalProperties: false + type: object + properties: + jobId: + $ref: '#/components/schemas/JobId' + name: + $ref: "#/components/schemas/String45" + description: + $ref: "#/components/schemas/String255Nullable" + createdBy: + $ref: '#/components/schemas/UserBasicNullable' + created: + $ref: '#/components/schemas/StringDateTime' + updatedBy: + $ref: '#/components/schemas/UserBasicNullable' + updated: + $ref: '#/components/schemas/StringDateTimeNullable' + tasks: + $ref: '#/components/schemas/JobTaskList' + event: + $ref: '#/components/schemas/JobEvent' + runCount: + type: integer + lastRun: + $ref: '#/components/schemas/JobRun' + required: [jobId, name, tasks, created, createdBy] + JobCreate: + additionalProperties: false + type: object + properties: + name: + $ref: "#/components/schemas/String45" + description: + $ref: "#/components/schemas/String255Nullable" + tasks: + $ref: '#/components/schemas/JobTaskListCreate' + event: + $ref: '#/components/schemas/JobEventCreate' + required: [name, tasks] + JobEvent: + oneOf: + - type: integer + nullable: true + - $ref: '#/components/schemas/JobEventRecurring' + - $ref: '#/components/schemas/JobEventOnce' + JobEventCreate: + oneOf: + - $ref: '#/components/schemas/JobEventRecurringCreate' + - $ref: '#/components/schemas/JobEventOnceCreate' + - type: integer + nullable: true + JobEventOnce: + additionalProperties: false + type: object + properties: + eventId: + $ref: "#/components/schemas/String45" + type: + type: string + enum: + - once + starts: + $ref: '#/components/schemas/StringDateTime' + enabled: + type: boolean + default: true + required: [eventId, starts, type] + JobEventOnceCreate: + additionalProperties: false + type: object + properties: + type: + type: string + enum: + - once + starts: + $ref: '#/components/schemas/StringDateTime' + required: [starts, type] + JobEventRecurring: + additionalProperties: false + type: object + properties: + eventId: + $ref: "#/components/schemas/String45" + type: + type: string + enum: + - recurring + interval: + $ref: '#/components/schemas/JobInterval' + starts: + $ref: '#/components/schemas/StringDateTimeNullable' + ends: + $ref: '#/components/schemas/StringDateTimeNullable' + enabled: + type: boolean + default: true + required: [eventId, type, interval] + JobEventRecurringCreate: + additionalProperties: false + type: object + properties: + type: + type: string + enum: + - recurring + interval: + $ref: '#/components/schemas/JobInterval' + starts: + $ref: '#/components/schemas/StringDateTimeNullable' + ends: + $ref: '#/components/schemas/StringDateTimeNullable' + enabled: + type: boolean + default: true + required: [type, interval] + JobInterval: + additionalProperties: false + type: object + properties: + value: + type: string + field: + type: string + enum: + - minute + - hour + - day + - week + - month + required: [value, field] + JobId: + $ref: '#/components/schemas/StringIntId' + JobRun: + additionalProperties: false + nullable: true + type: object + properties: + runId: + $ref: '#/components/schemas/JobRunId' + created: + $ref: '#/components/schemas/StringDateTime' + updated: + $ref: '#/components/schemas/StringDateTimeNullable' + state: + $ref: '#/components/schemas/JobRunState' + jobId: + $ref: '#/components/schemas/JobId' + required: [runId, created, state] + JobRunCreated: + additionalProperties: false + type: object + properties: + runId: + $ref: '#/components/schemas/JobRunId' + required: [runId] + JobRunId: + $ref: '#/components/schemas/StringUuid' + JobRunOutput: + additionalProperties: false + type: object + properties: + type: + type: string + message: + type: string + task: + $ref: "#/components/schemas/String45" + taskId: + $ref: "#/components/schemas/JobTaskId" + ts: + $ref: '#/components/schemas/StringDateTime' + required: [message, type, task, ts] + JobRunState: + type: string + nullable: true + enum: + - running + - completed + - failed + JobTask: + type: object + additionalProperties: false + properties: + taskId: + $ref: '#/components/schemas/StringIntId' + name: + $ref: "#/components/schemas/String45" + description: + $ref: "#/components/schemas/String255Nullable" + command: + $ref: '#/components/schemas/String255' + required: [taskId, name] + JobTaskId: + $ref: '#/components/schemas/StringIntId' + JobTaskList: + type: array + minItems: 1 + items: + $ref: '#/components/schemas/JobTask' + JobTaskListCreate: + type: array + minItems: 1 + items: + $ref: '#/components/schemas/JobTaskId' + JobUpdate: + type: object + additionalProperties: false + minProperties: 1 + properties: + name: + $ref: "#/components/schemas/String45" + description: + $ref: "#/components/schemas/String255Nullable" + tasks: + $ref: '#/components/schemas/JobTaskListCreate' + event: + $ref: '#/components/schemas/JobEventCreate' + + Label: + additionalProperties: false + type: object + properties: + color: + $ref: '#/components/schemas/StringHexColor' + description: + $ref: '#/components/schemas/String255Nullable' + labelId: + $ref: '#/components/schemas/LabelId' + name: + $ref: '#/components/schemas/LabelName' + uses: + type: integer + required: + - name + - description + - color + - labelId + - uses + LabelBasic: + additionalProperties: false + type: object + properties: + labelId: + $ref: '#/components/schemas/LabelId' + name: + $ref: '#/components/schemas/LabelName' + required: + - name + - labelId + LabelBasicWithColor: + additionalProperties: false + type: object + properties: + color: + $ref: '#/components/schemas/StringHexColor' + labelId: + $ref: '#/components/schemas/LabelId' + name: + $ref: '#/components/schemas/LabelName' + required: + - name + - color + - labelId + LabelCreate: + additionalProperties: false + type: object + properties: + color: + $ref: '#/components/schemas/StringHexColor' + description: + $ref: '#/components/schemas/String255Nullable' + name: + $ref: '#/components/schemas/LabelName' + required: + - name + - description + - color + LabelId: + $ref: '#/components/schemas/StringUuid' + LabelIdNullable: + $ref: '#/components/schemas/StringUuidNullable' + LabelName: + maxLength: 16 + minLength: 1 + type: string + LabelUpdate: + additionalProperties: false + type: object + properties: + color: + $ref: '#/components/schemas/StringHexColor' + description: + $ref: '#/components/schemas/String255Nullable' + name: + $ref: '#/components/schemas/LabelName' + LastMigration: + type: integer + minimum: 0 + LocationString: + type: string + MaxTs: + format: date-time + nullable: true + type: string + Metadata: + type: object + additionalProperties: + type: string + MetadataKey: + type: string + MetadataValue: + type: string + MetricsAggAsset: + type: object + properties: + assetId: + $ref: '#/components/schemas/AssetId' + benchmarkIds: + type: array + items: + $ref: '#/components/schemas/BenchmarkId' + fqdn: + $ref: '#/components/schemas/AssetFqdn' + ip: + $ref: '#/components/schemas/AssetIp' + labels: + type: array + items: + $ref: '#/components/schemas/LabelBasicWithColor' + mac: + $ref: '#/components/schemas/AssetMac' + name: + $ref: '#/components/schemas/AssetName' + noncomputing: + $ref: '#/components/schemas/AssetNoncomputing' + required: + - assetId + - name + - labels + - benchmarkIds + MetricsAggCollection: + type: object + properties: + assets: + type: integer + checklists: + type: integer + collectionId: + $ref: '#/components/schemas/CollectionId' + name: + $ref: '#/components/schemas/CollectionName' + stigs: + type: integer + required: + - collectionId + - name + - checklists + - assets + - stigs + MetricsAggLabel: + type: object + properties: + assets: + type: integer + labelId: + $ref: '#/components/schemas/LabelIdNullable' + name: + nullable: true + type: string + required: + - labelId + - name + - assets + MetricsAggMeta: + type: object + properties: + assets: + type: integer + checklists: + type: integer + collections: + type: integer + stigs: + type: integer + required: + - collections + - assets + - stigs + - checklists + MetricsAggStig: + type: object + properties: + assets: + type: integer + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + collections: + type: integer + marking: + $ref: '#/components/schemas/RevisionMarkingNullable' + revisionPinned: + type: boolean + revisionStr: + $ref: '#/components/schemas/RevisionStrRaw' + revisionDate: + $ref: "#/components/schemas/StringDateNullable" + ruleCount: + $ref: '#/components/schemas/RuleCount' + title: + $ref: '#/components/schemas/StigTitle' + required: + - benchmarkId + - marking + - title + - assets + - revisionStr + - revisionDate + - ruleCount + MetricsDetail: + properties: + metrics: + additionalProperties: false + type: object + properties: + assessed: + type: integer + assessedBySeverity: + additionalProperties: false + type: object + properties: + high: + type: integer + low: + type: integer + medium: + type: integer + required: + - low + - medium + - high + assessments: + type: integer + assessmentsBySeverity: + additionalProperties: false + type: object + properties: + high: + type: integer + low: + type: integer + medium: + type: integer + required: + - low + - medium + - high + findings: + additionalProperties: false + type: object + properties: + high: + type: integer + low: + type: integer + medium: + type: integer + required: + - low + - medium + - high + maxTouchTs: + $ref: '#/components/schemas/StringDateTimeNullable' + maxTs: + $ref: '#/components/schemas/MaxTs' + minTs: + $ref: '#/components/schemas/MinTs' + results: + additionalProperties: false + type: object + properties: + error: + $ref: '#/components/schemas/CollectionStatusCount' + fail: + $ref: '#/components/schemas/CollectionStatusCount' + fixed: + $ref: '#/components/schemas/CollectionStatusCount' + informational: + $ref: '#/components/schemas/CollectionStatusCount' + notapplicable: + $ref: '#/components/schemas/CollectionStatusCount' + notchecked: + $ref: '#/components/schemas/CollectionStatusCount' + notselected: + $ref: '#/components/schemas/CollectionStatusCount' + pass: + $ref: '#/components/schemas/CollectionStatusCount' + unknown: + $ref: '#/components/schemas/CollectionStatusCount' + required: + - notchecked + - notapplicable + - pass + - fail + - unknown + - error + - notselected + - informational + - fixed + statuses: + type: object + properties: + accepted: + $ref: '#/components/schemas/CollectionStatusCount' + rejected: + $ref: '#/components/schemas/CollectionStatusCount' + saved: + $ref: '#/components/schemas/CollectionStatusCount' + submitted: + $ref: '#/components/schemas/CollectionStatusCount' + required: + - assessed + - assessedBySeverity + - assessments + - assessmentsBySeverity + - findings + - minTs + - maxTs + - maxTouchTs + - results + - statuses + required: + - metrics + MetricsDetailAggAsset: + allOf: + - $ref: '#/components/schemas/MetricsAggAsset' + - $ref: '#/components/schemas/MetricsDetail' + MetricsDetailAggCollection: + allOf: + - $ref: '#/components/schemas/MetricsAggCollection' + - $ref: '#/components/schemas/MetricsDetail' + MetricsDetailAggLabel: + allOf: + - $ref: '#/components/schemas/MetricsAggLabel' + - $ref: '#/components/schemas/MetricsDetail' + MetricsDetailAggMeta: + allOf: + - $ref: '#/components/schemas/MetricsAggMeta' + - $ref: '#/components/schemas/MetricsDetail' + MetricsDetailAggStig: + allOf: + - $ref: '#/components/schemas/MetricsAggStig' + - $ref: '#/components/schemas/MetricsDetail' + MetricsDetailUnagg: + allOf: + - $ref: '#/components/schemas/MetricsUnagg' + - $ref: '#/components/schemas/MetricsDetail' + MetricsSummary: + properties: + metrics: + additionalProperties: false + type: object + properties: + assessed: + type: integer + assessedBySeverity: + additionalProperties: false + type: object + properties: + high: + type: integer + low: + type: integer + medium: + type: integer + required: + - low + - medium + - high + assessments: + type: integer + assessmentsBySeverity: + additionalProperties: false + type: object + properties: + high: + type: integer + low: + type: integer + medium: + type: integer + required: + - low + - medium + - high + findings: + additionalProperties: false + type: object + properties: + high: + type: integer + low: + type: integer + medium: + type: integer + required: + - low + - medium + - high + maxTouchTs: + $ref: '#/components/schemas/StringDateTimeNullable' + maxTs: + $ref: '#/components/schemas/MaxTs' + minTs: + $ref: '#/components/schemas/MinTs' + results: + additionalProperties: false + type: object + properties: + fail: + type: integer + notapplicable: + type: integer + other: + type: integer + pass: + type: integer + required: + - fail + - notapplicable + - other + - pass + statuses: + additionalProperties: false + type: object + properties: + accepted: + type: integer + rejected: + type: integer + saved: + type: integer + submitted: + type: integer + required: + - saved + - submitted + - accepted + - rejected + required: + - assessed + - assessedBySeverity + - assessments + - assessmentsBySeverity + - findings + - minTs + - maxTs + - maxTouchTs + - results + - statuses + required: + - metrics + MetricsSummaryAggAsset: + allOf: + - $ref: '#/components/schemas/MetricsAggAsset' + - $ref: '#/components/schemas/MetricsSummary' + MetricsSummaryAggCollection: + allOf: + - $ref: '#/components/schemas/MetricsAggCollection' + - $ref: '#/components/schemas/MetricsSummary' + MetricsSummaryAggLabel: + allOf: + - $ref: '#/components/schemas/MetricsAggLabel' + - $ref: '#/components/schemas/MetricsSummary' + MetricsSummaryAggMeta: + allOf: + - $ref: '#/components/schemas/MetricsAggMeta' + - $ref: '#/components/schemas/MetricsSummary' + MetricsSummaryAggStig: + allOf: + - $ref: '#/components/schemas/MetricsAggStig' + - $ref: '#/components/schemas/MetricsSummary' + MetricsSummaryUnagg: + allOf: + - $ref: '#/components/schemas/MetricsUnagg' + - $ref: '#/components/schemas/MetricsSummary' + MetricsUnagg: + type: object + properties: + assetId: + type: string + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + labels: + items: + $ref: '#/components/schemas/LabelBasicWithColor' + type: array + name: + type: string + revisionPinned: + type: boolean + revisionStr: + $ref: '#/components/schemas/RevisionStrRaw' + revisionDate: + $ref: "#/components/schemas/StringDateNullable" + title: + $ref: '#/components/schemas/StigTitle' + required: + - assetId + - name + - labels + - benchmarkId + - title + - revisionStr + - revisionDate + - revisionPinned + MinTs: + format: date-time + nullable: true + type: string + Owner: + oneOf: + - $ref: '#/components/schemas/UserBasicWithDisplayName' + - $ref: '#/components/schemas/UserGroup' + ParentControl: + $ref: '#/components/schemas/String255' + ResultEngine: + additionalProperties: false + type: object + nullable: true + properties: + checkContent: + $ref: '#/components/schemas/ResultEngineCheckContent' + overrides: + type: array + items: + $ref: '#/components/schemas/ResultEngineOverride' + minItems: 1 + product: + $ref: '#/components/schemas/String255' + time: + $ref: '#/components/schemas/StringDateTime' + type: + $ref: '#/components/schemas/ResultEngineType' + version: + $ref: '#/components/schemas/VersionString' + required: + - product + - type + ResultEngineCheckContent: + additionalProperties: false + nullable: true + type: object + properties: + component: + $ref: '#/components/schemas/String255' + location: + $ref: '#/components/schemas/LocationString' + required: + - location + ResultEngineOverride: + additionalProperties: false + type: object + properties: + authority: + $ref: '#/components/schemas/String255' + newResult: + $ref: '#/components/schemas/ReviewResult' + oldResult: + $ref: '#/components/schemas/ReviewResult' + remark: + $ref: '#/components/schemas/String255' + time: + $ref: '#/components/schemas/StringDateTime' + required: + - authority + - oldResult + - newResult + ResultEngineType: + type: string + enum: + - scap + - script + - other + ReviewAsset: + type: object + properties: + autoResult: + type: boolean + comment: + $ref: '#/components/schemas/CommentaryString' + detail: + $ref: '#/components/schemas/CommentaryString' + history: + type: array + items: + $ref: '#/components/schemas/ReviewHistory' + metadata: + $ref: '#/components/schemas/Metadata' + result: + $ref: '#/components/schemas/ReviewResult' + resultEngine: + $ref: '#/components/schemas/ResultEngine' + rule: + $ref: '#/components/schemas/RuleAbbr' + ruleId: + $ref: '#/components/schemas/RuleId' + ruleIds: + type: array + items: + $ref: '#/components/schemas/RuleId' + status: + $ref: '#/components/schemas/ReviewStatusRead' + stigs: + type: array + items: + $ref: '#/components/schemas/CollectionStigWithIsDefault' + touchTs: + $ref: '#/components/schemas/StringDateTime' + ts: + $ref: '#/components/schemas/StringDateTime' + userId: + $ref: '#/components/schemas/UserId' + username: + $ref: '#/components/schemas/Username' + required: + - ruleId + - ruleIds + - result + - detail + - comment + - status + - userId + - username + - ts + - touchTs + ReviewAssetPost: + type: object + required: + - ruleId + - result + - detail + - comment + additionalProperties: false + properties: + ruleId: + $ref: '#/components/schemas/RuleId' + result: + $ref: '#/components/schemas/ReviewResult' + resultEngine: + $ref: '#/components/schemas/ResultEngine' + detail: + $ref: '#/components/schemas/CommentaryStringNullable' + comment: + $ref: '#/components/schemas/CommentaryStringNullable' + autoResult: + type: boolean + metadata: + $ref: '#/components/schemas/Metadata' + status: + $ref: '#/components/schemas/ReviewStatusWrite' + ReviewAssetRulePatch: + additionalProperties: false + type: object + minProperties: 1 + properties: + comment: + $ref: '#/components/schemas/CommentaryString' + detail: + $ref: '#/components/schemas/CommentaryString' + metadata: + $ref: '#/components/schemas/Metadata' + result: + $ref: '#/components/schemas/ReviewResult' + resultEngine: + $ref: '#/components/schemas/ResultEngine' + status: + $ref: '#/components/schemas/ReviewStatusWrite' + ReviewAssetRulePut: + additionalProperties: false + type: object + properties: + autoResult: + type: boolean + comment: + $ref: '#/components/schemas/CommentaryStringNullable' + detail: + $ref: '#/components/schemas/CommentaryStringNullable' + metadata: + $ref: '#/components/schemas/Metadata' + result: + $ref: '#/components/schemas/ReviewResult' + resultEngine: + $ref: '#/components/schemas/ResultEngine' + status: + $ref: '#/components/schemas/ReviewStatusWrite' + required: + - result + - detail + - comment + ReviewAssetRuleRead: + type: object + properties: + access: + $ref: '#/components/schemas/AclRuleAccess' + autoResult: + type: boolean + comment: + $ref: '#/components/schemas/CommentaryString' + detail: + $ref: '#/components/schemas/CommentaryString' + history: + type: array + items: + $ref: '#/components/schemas/ReviewHistory' + metadata: + $ref: '#/components/schemas/Metadata' + result: + $ref: '#/components/schemas/ReviewResult' + resultEngine: + $ref: '#/components/schemas/ResultEngine' + rule: + $ref: '#/components/schemas/RuleAbbr' + ruleIds: + type: array + items: + $ref: '#/components/schemas/RuleId' + status: + $ref: '#/components/schemas/ReviewStatusRead' + stigs: + type: array + items: + $ref: '#/components/schemas/CollectionStigWithIsDefault' + touchTs: + $ref: '#/components/schemas/StringDateTime' + ts: + $ref: '#/components/schemas/StringDateTime' + userId: + $ref: '#/components/schemas/UserId' + username: + $ref: '#/components/schemas/Username' + required: + - access + - result + - detail + - comment + - userId + - username + - ts + - status + - touchTs + ReviewBatch: + additionalProperties: false + type: object + properties: + action: + $ref: '#/components/schemas/ReviewBatchAction' + assets: + $ref: '#/components/schemas/ReviewBatchAssetsCriteria' + dryRun: + default: false + type: boolean + rules: + $ref: '#/components/schemas/ReviewBatchRulesCriteria' + source: + $ref: '#/components/schemas/ReviewBatchSource' + updateFilters: + type: array + items: + $ref: '#/components/schemas/ReviewBatchFilter' + required: + - source + - assets + - rules + ReviewBatchAction: + type: string + enum: + - insert + - update + - merge + ReviewBatchAssetsCriteria: + oneOf: + - $ref: '#/components/schemas/ReviewBatchCriteria_AssetIds' + - $ref: '#/components/schemas/ReviewBatchCriteria_BenchmarkIds' + ReviewBatchCriteria_AssetIds: + additionalProperties: false + type: object + properties: + assetIds: + type: array + items: + $ref: '#/components/schemas/AssetId' + maxItems: 2500 + minItems: 1 + uniqueItems: true + required: + - assetIds + ReviewBatchCriteria_BenchmarkIds: + additionalProperties: false + type: object + properties: + benchmarkIds: + type: array + items: + $ref: '#/components/schemas/BenchmarkId' + maxItems: 50 + minItems: 1 + uniqueItems: true + required: + - benchmarkIds + ReviewBatchCriteria_RuleIds: + additionalProperties: false + type: object + properties: + ruleIds: + type: array + items: + $ref: '#/components/schemas/RuleId' + maxItems: 500 + minItems: 1 + uniqueItems: true + required: + - ruleIds + ReviewBatchFilter: + oneOf: + - $ref: '#/components/schemas/ReviewBatchFilter_String' + - $ref: '#/components/schemas/ReviewBatchFilter_Result' + - $ref: '#/components/schemas/ReviewBatchFilter_Status' + - $ref: '#/components/schemas/ReviewBatchFilter_Date' + - $ref: '#/components/schemas/ReviewBatchFilter_User' + ReviewBatchFilter_Date: + additionalProperties: false + type: object + properties: + condition: + default: equals + type: string + enum: + - equals + - lessThan + - greaterThan + field: + type: string + enum: + - ts + - statusTs + - touchTs + value: + $ref: '#/components/schemas/StringDateTime' + required: + - field + - value + ReviewBatchFilter_Result: + additionalProperties: false + type: object + properties: + condition: + default: equals + type: string + enum: + - equals + - notequal + field: + type: string + enum: + - result + value: + $ref: '#/components/schemas/ReviewResult' + required: + - field + - value + ReviewBatchFilter_Status: + additionalProperties: false + type: object + properties: + condition: + default: equals + type: string + enum: + - equals + - notequal + field: + type: string + enum: + - statusLabel + - status + value: + $ref: '#/components/schemas/ReviewStatusLabel' + required: + - field + - value + ReviewBatchFilter_String: + additionalProperties: false + type: object + properties: + condition: + default: equals + type: string + enum: + - equals + - contains + - beginsWith + - endsWith + field: + type: string + enum: + - detail + - comment + - statusText + value: + type: string + required: + - field + - value + ReviewBatchFilter_User: + additionalProperties: false + type: object + properties: + condition: + default: equals + type: string + enum: + - equals + - notequal + field: + type: string + enum: + - userId + - statusUserId + value: + $ref: '#/components/schemas/StringIntId' + required: + - field + - value + ReviewBatchResponse: + additionalProperties: false + type: object + properties: + failedValidation: + type: integer + inserted: + type: integer + updated: + type: integer + validationErrors: + type: array + items: + type: object + properties: + assetId: + $ref: '#/components/schemas/AssetId' + error: + $ref: '#/components/schemas/String255' + ruleId: + $ref: '#/components/schemas/RuleId' + required: + - inserted + - updated + - failedValidation + - validationErrors + ReviewBatchResponseDryRun: + additionalProperties: false + type: object + properties: + validationErrors: + type: array + items: + type: object + properties: + assetId: + $ref: '#/components/schemas/AssetId' + error: + $ref: '#/components/schemas/String255' + ruleId: + $ref: '#/components/schemas/RuleId' + willFailValidation: + type: integer + willInsert: + type: integer + willUpdate: + type: integer + required: + - willInsert + - willUpdate + - willFailValidation + - validationErrors + ReviewBatchRulesCriteria: + oneOf: + - $ref: '#/components/schemas/ReviewBatchCriteria_RuleIds' + - $ref: '#/components/schemas/ReviewBatchCriteria_BenchmarkIds' + ReviewBatchSource: + additionalProperties: false + type: object + properties: + review: + $ref: '#/components/schemas/ReviewAssetRulePatch' + required: + - review + ReviewHistory: + additionalProperties: false + type: object + properties: + autoResult: + type: boolean + comment: + $ref: '#/components/schemas/CommentaryString' + detail: + $ref: '#/components/schemas/CommentaryString' + result: + $ref: '#/components/schemas/ReviewResult' + resultEngine: + $ref: '#/components/schemas/ResultEngine' + ruleId: + $ref: '#/components/schemas/RuleId' + status: + $ref: '#/components/schemas/ReviewStatusRead' + touchTs: + $ref: '#/components/schemas/StringDateTime' + ts: + $ref: '#/components/schemas/StringDateTime' + userId: + $ref: '#/components/schemas/UserId' + username: + $ref: '#/components/schemas/Username' + required: + - result + - detail + - comment + - status + - userId + - username + - ts + - touchTs + - ruleId + ReviewHistoryAsset: + additionalProperties: false + type: object + properties: + assetId: + $ref: '#/components/schemas/String255' + reviewHistories: + type: array + items: + $ref: '#/components/schemas/ReviewHistoryRule' + required: + - assetId + - reviewHistories + ReviewHistoryDeleted: + additionalProperties: false + type: object + properties: + HistoryEntriesDeleted: + type: integer + required: + - HistoryEntriesDeleted + ReviewHistoryRule: + additionalProperties: false + type: object + properties: + history: + type: array + items: + $ref: '#/components/schemas/ReviewHistory' + ruleId: + $ref: '#/components/schemas/RuleId' + required: + - ruleId + - history + ReviewHistoryStats: + additionalProperties: false + type: object + properties: + assetHistoryEntryCounts: + type: array + items: + $ref: '#/components/schemas/ReviewHistoryStatsAsset' + collectionHistoryEntryCount: + type: integer + oldestHistoryEntryDate: + $ref: '#/components/schemas/StringDateTime' + required: + - collectionHistoryEntryCount + - oldestHistoryEntryDate + ReviewHistoryStatsAsset: + additionalProperties: false + type: object + properties: + assetId: + $ref: '#/components/schemas/String255' + historyEntryCount: + type: integer + oldestHistoryEntry: + nullable: true + type: string + required: + - assetId + - historyEntryCount + - oldestHistoryEntry + ReviewPostResponse: + additionalProperties: false + type: object + properties: + affected: + type: object + properties: + inserted: + type: number + updated: + type: number + rejected: + type: array + items: + type: object + properties: + reason: + $ref: '#/components/schemas/String255' + ruleId: + $ref: '#/components/schemas/RuleId' + required: + - rejected + - affected + ReviewRead: + additionalProperties: false + type: object + properties: + access: + $ref: '#/components/schemas/AclRuleAccess' + assetId: + $ref: '#/components/schemas/StringIntId' + assetLabelIds: + type: array + items: + $ref: '#/components/schemas/LabelId' + assetLabels: + type: array + items: + $ref: '#/components/schemas/LabelBasicWithColor' + assetName: + $ref: '#/components/schemas/String255' + autoResult: + type: boolean + comment: + $ref: '#/components/schemas/CommentaryStringNullable' + detail: + $ref: '#/components/schemas/CommentaryStringNullable' + metadata: + $ref: '#/components/schemas/Metadata' + result: + $ref: '#/components/schemas/ReviewResult' + resultEngine: + $ref: '#/components/schemas/ResultEngine' + rule: + $ref: '#/components/schemas/RuleAbbr' + ruleId: + $ref: '#/components/schemas/RuleId' + ruleIds: + type: array + items: + $ref: '#/components/schemas/RuleId' + status: + $ref: '#/components/schemas/ReviewStatusRead' + stigs: + type: array + items: + $ref: '#/components/schemas/CollectionStigWithIsDefault' + touchTs: + $ref: '#/components/schemas/StringDateTime' + ts: + $ref: '#/components/schemas/StringDateTime' + userId: + $ref: '#/components/schemas/UserId' + username: + $ref: '#/components/schemas/Username' + required: + - assetId + - assetName + - ruleId + - ruleIds + - result + - detail + - comment + - userId + - username + - ts + - touchTs + - status + ReviewResult: + enum: + - fail + - pass + - notapplicable + - notchecked + - unknown + - error + - notselected + - informational + - fixed + type: string + ReviewStatusLabel: + enum: + - saved + - submitted + - accepted + - rejected + type: string + ReviewStatusRead: + additionalProperties: false + type: object + properties: + label: + $ref: '#/components/schemas/ReviewStatusLabel' + text: + $ref: '#/components/schemas/StatusText' + ts: + $ref: '#/components/schemas/StringDateTime' + user: + $ref: '#/components/schemas/UserBasic' + required: + - label + - text + - user + - ts + ReviewStatusOption: + enum: + - "null" + - saved + - submitted + - accepted + type: string + ReviewStatusWrite: + oneOf: + - $ref: '#/components/schemas/ReviewStatusLabel' + - type: object + required: + - label + - text + additionalProperties: false + properties: + label: + $ref: '#/components/schemas/ReviewStatusLabel' + text: + $ref: '#/components/schemas/StatusText' + Revision: + additionalProperties: false + type: object + properties: + benchmarkDate: + $ref: '#/components/schemas/StringDateNullable' + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + collectionIds: + type: array + items: + $ref: '#/components/schemas/CollectionId' + marking: + $ref: '#/components/schemas/RevisionMarkingNullable' + release: + $ref: '#/components/schemas/RevisionRelease' + revisionStr: + $ref: '#/components/schemas/RevisionStr' + ruleCount: + $ref: '#/components/schemas/RuleCount' + status: + $ref: '#/components/schemas/RevisionStatus' + statusDate: + $ref: '#/components/schemas/StringDateNullable' + version: + $ref: '#/components/schemas/VersionString' + required: + - benchmarkId + - revisionStr + - version + - release + - benchmarkDate + - status + - statusDate + - ruleCount + - collectionIds + RevisionBasic: + additionalProperties: false + type: object + properties: + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + revisionStr: + $ref: '#/components/schemas/RevisionStr' + required: + - benchmarkId + - revisionStr + RevisionDate: + $ref: '#/components/schemas/StringDate' + RevisionMarkingNullable: + type: string + nullable: true + pattern: ^CUI|U|FOUO$ + RevisionPost: + additionalProperties: false + type: object + properties: + action: + type: string + enum: + - inserted + - preserved + - replaced + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + revisionStr: + $ref: '#/components/schemas/RevisionStr' + marking: + $ref: '#/components/schemas/RevisionMarkingNullable' + required: + - benchmarkId + - revisionStr + - action + RevisionRelease: + $ref: '#/components/schemas/String45' + RevisionStatus: + $ref: '#/components/schemas/String45Nullable' + RevisionStr: + pattern: ^(V\d{1,3}R\d{1,3}(\.\d{1,3})?|latest)$ + type: string + RevisionStrRaw: + pattern: ^(V\d{1,3}R\d{1,3}(\.\d{1,3})?)$ + type: string + Roles: + type: string + enum: ["restricted", "full", "manage", "owner"] + RuleAbbr: + additionalProperties: false + type: object + properties: + ruleId: + $ref: '#/components/schemas/RuleId' + severity: + type: string + title: + $ref: '#/components/schemas/RuleTitle' + version: + $ref: '#/components/schemas/VersionString' + required: + - ruleId + - version + - title + - severity + RuleCount: + nullable: true + type: integer + RuleId: + $ref: '#/components/schemas/String45Nullable' + RuleProjected: + additionalProperties: false + type: object + properties: + ccis: + items: + $ref: '#/components/schemas/CciBasic' + type: array + check: + $ref: '#/components/schemas/Check' + detail: + additionalProperties: false + type: object + properties: + documentable: + nullable: true + type: string + falseNegatives: + nullable: true + type: string + falsePositives: + nullable: true + type: string + mitigationControl: + nullable: true + type: string + mitigations: + nullable: true + type: string + potentialImpacts: + nullable: true + type: string + responsibility: + nullable: true + type: string + severityOverrideGuidance: + nullable: true + type: string + thirdPartyTools: + nullable: true + type: string + vulnDiscussion: + nullable: true + type: string + weight: + nullable: true + type: string + fix: + $ref: '#/components/schemas/Fix' + groupId: + $ref: '#/components/schemas/GroupId' + groupTitle: + $ref: '#/components/schemas/GroupTitle' + ruleId: + $ref: '#/components/schemas/RuleId' + ruleIds: + type: array + items: + $ref: '#/components/schemas/RuleId' + severity: + type: string + stigs: + type: array + items: + $ref: '#/components/schemas/RevisionBasic' + title: + $ref: '#/components/schemas/RuleTitle' + version: + $ref: '#/components/schemas/VersionString' + required: + - ruleId + - version + - title + - severity + - groupId + - groupTitle + RuleSeverity: + enum: + - high + - medium + - low + - null + type: string + nullable: true + RuleTitle: + $ref: '#/components/schemas/StringMax' + SCAPMap: + additionalProperties: false + type: object + properties: + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + scapBenchmarkId: + type: string + STIG: + additionalProperties: false + type: object + properties: + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + collectionIds: + type: array + items: + $ref: '#/components/schemas/CollectionId' + lastRevisionDate: + $ref: '#/components/schemas/StringDateNullable' + lastRevisionStr: + type: string + marking: + $ref: '#/components/schemas/RevisionMarkingNullable' + revisionStrs: + type: array + items: + $ref: '#/components/schemas/RevisionStrRaw' + revisions: + type: array + items: + $ref: '#/components/schemas/Revision' + ruleCount: + $ref: '#/components/schemas/RuleCount' + status: + $ref: '#/components/schemas/StatusText' + title: + $ref: '#/components/schemas/StigTitle' + required: + - benchmarkId + - title + - lastRevisionStr + - lastRevisionDate + - ruleCount + - collectionIds + State: + type: string + enum: + - starting + - available + - unavailable + - fail + - stop + StateResponse: + type: object + properties: + currentState: + $ref: '#/components/schemas/State' + since: + $ref: '#/components/schemas/StringDateTime' + dependencies: + $ref: '#/components/schemas/Dependencies' + endpoints: + $ref: '#/components/schemas/Endpoints' + StatusText: + $ref: '#/components/schemas/String511Nullable' + StigTitle: + $ref: '#/components/schemas/String255' + String20: + maxLength: 20 + type: string + String20Nullable: + maxLength: 20 + nullable: true + type: string + String255: + maxLength: 255 + type: string + String255Nullable: + maxLength: 255 + nullable: true + type: string + String32767: + maxLength: 32767 + type: string + String32767Nullable: + maxLength: 32767 + nullable: true + type: string + String45: + maxLength: 45 + type: string + String45Nullable: + maxLength: 45 + nullable: true + type: string + String511Nullable: + maxLength: 511 + nullable: true + type: string + StringDate: + format: date + type: string + StringDateNullable: + format: date + nullable: true + type: string + StringDateTime: + format: date-time + type: string + StringDateTimeNullable: + format: date-time + nullable: true + type: string + StringHexColor: + example: aa33cc + pattern: ^[a-fA-F0-9]{6}$ + type: string + StringIntId: + maxLength: 10 + minLength: 1 + pattern: ^[0-9]{1,10}$ + type: string + StringIntIdNullable: + nullable: true + maxLength: 10 + minLength: 1 + pattern: ^[0-9]{1,10}$ + type: string + StringMax: + maxLength: 16777215 + type: string + StringUuid: + pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ + type: string + StringUuidNullable: + nullable: true + pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ + type: string + TextRefNist: + $ref: '#/components/schemas/String255' + UnreviewedAsset: + additionalProperties: false + type: object + properties: + assetId: + $ref: '#/components/schemas/AssetId' + labels: + type: array + items: + $ref: '#/components/schemas/LabelBasic' + name: + $ref: '#/components/schemas/AssetName' + unreviewed: + type: array + items: + $ref: '#/components/schemas/UnreviewedAssetItem' + required: + - assetId + - name + - labels + - unreviewed + UnreviewedAssetItem: + additionalProperties: false + type: object + properties: + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + groupId: + $ref: '#/components/schemas/GroupId' + groupTitle: + $ref: '#/components/schemas/GroupTitle' + result: + $ref: '#/components/schemas/ChecklistResultUnreviewed' + ruleId: + $ref: '#/components/schemas/RuleId' + ruleTitle: + $ref: '#/components/schemas/RuleTitle' + severity: + $ref: '#/components/schemas/RuleSeverity' + required: + - result + - ruleId + - groupId + - benchmarkId + UnreviewedRule: + additionalProperties: false + type: object + properties: + benchmarkId: + $ref: '#/components/schemas/BenchmarkId' + groupId: + $ref: '#/components/schemas/GroupId' + groupTitle: + $ref: '#/components/schemas/GroupTitle' + ruleId: + $ref: '#/components/schemas/RuleId' + ruleTitle: + $ref: '#/components/schemas/RuleTitle' + severity: + $ref: '#/components/schemas/RuleSeverity' + unreviewed: + type: array + items: + $ref: '#/components/schemas/UnreviewedRuleItem' + required: + - ruleId + - groupId + - benchmarkId + - unreviewed + UnreviewedRuleItem: + additionalProperties: false + type: object + properties: + assetId: + $ref: '#/components/schemas/AssetId' + labels: + type: array + items: + $ref: '#/components/schemas/LabelBasic' + name: + $ref: '#/components/schemas/AssetName' + result: + $ref: '#/components/schemas/ChecklistResultUnreviewed' + required: + - result + - assetId + - name + - labels + UserBasic: + additionalProperties: false + type: object + properties: + userId: + $ref: '#/components/schemas/UserId' + username: + $ref: '#/components/schemas/Username' + roleId: + $ref: '#/components/schemas/RoleId' + required: + - userId + - username + UserBasicNullable: + nullable: true + additionalProperties: false + type: object + properties: + userId: + $ref: '#/components/schemas/UserIdNullable' + username: + $ref: '#/components/schemas/UsernameNullable' + required: + - userId + - username + UserBasicWithDisplayName: + additionalProperties: false + type: object + properties: + userId: + $ref: '#/components/schemas/UserId' + username: + $ref: '#/components/schemas/Username' + displayName: + $ref: '#/components/schemas/DisplayName' + required: + - userId + - username + - displayName + UserCreateOrReplace: + additionalProperties: false + type: object + properties: + collectionGrants: + type: array + items: + $ref: '#/components/schemas/CollectionGrant' + uniqueItems: true + userGroups: + type: array + items: + $ref: '#/components/schemas/UserGroupId' + uniqueItems: true + default: [] + username: + $ref: '#/components/schemas/Username' + status: + $ref: '#/components/schemas/UserStatus' + required: + - username + - collectionGrants + UserGrant: + type: object + required: + - userId + - roleId + properties: + userId: + $ref: '#/components/schemas/UserId' + roleId: + $ref: '#/components/schemas/RoleId' + UserGrantProjected: + additionalProperties: false + type: object + properties: + grantId: + $ref: '#/components/schemas/GrantId' + roleId: + $ref: '#/components/schemas/RoleId' + user: + $ref: '#/components/schemas/UserBasicWithDisplayName' + required: + - user + - roleId + UserGroup: + type: object + additionalProperties: false + required: + - userGroupId + - name + - description + properties: + userGroupId: + $ref: '#/components/schemas/UserGroupId' + name: + $ref: '#/components/schemas/String255' + description: + $ref: '#/components/schemas/String255Nullable' + UserGroupBasic: + type: object + additionalProperties: false + required: + - userGroupId + - name + properties: + userGroupId: + $ref: '#/components/schemas/UserGroupId' + name: + $ref: '#/components/schemas/String255' + roleId: + $ref: '#/components/schemas/RoleId' + UserGroupCollectionGrant: + additionalProperties: false + type: object + properties: + roleId: + $ref: '#/components/schemas/RoleId' + collection: + type: object + properties: + collectionId: + $ref: '#/components/schemas/CollectionId' + name: + $ref: '#/components/schemas/CollectionName' + UserGroupGrant: + type: object + required: + - userGroupId + - roleId + additionalProperties: false + properties: + userGroupId: + $ref: '#/components/schemas/UserGroupId' + roleId: + type: integer + minimum: 1 + maximum: 4 + UserGroupGrantProjected: + type: object + required: + - userGroup + - roleId + additionalProperties: false + properties: + grantId: + $ref: '#/components/schemas/GrantId' + userGroup: + $ref: '#/components/schemas/UserGroup' + roleId: + $ref: '#/components/schemas/RoleId' + UserGroupId: + $ref: '#/components/schemas/StringIntId' + UserGroupPatch: + type: object + additionalProperties: false + minProperties: 1 + properties: + name: + $ref: '#/components/schemas/String255' + description: + $ref: '#/components/schemas/String255Nullable' + userIds: + type: array + items: + $ref: '#/components/schemas/UserId' + collectionGrants: + type: array + items: + $ref: '#/components/schemas/CollectionGrant' + uniqueItems: true + UserGroupProjected: + type: object + additionalProperties: false + required: + - userGroupId + - name + - description + properties: + userGroupId: + $ref: '#/components/schemas/UserGroupId' + name: + $ref: '#/components/schemas/String255' + description: + $ref: '#/components/schemas/String255Nullable' + users: + type: array + items: + $ref: '#/components/schemas/UserBasicWithDisplayName' + collectionGrants: + type: array + items: + $ref: '#/components/schemas/UserGroupCollectionGrant' + attributions: + $ref: '#/components/schemas/Attributions' + UserGroupPostOrPut: + type: object + additionalProperties: false + required: + - name + properties: + name: + $ref: '#/components/schemas/String255' + description: + $ref: '#/components/schemas/String255Nullable' + userIds: + type: array + uniqueItems: true + items: + $ref: '#/components/schemas/UserId' + collectionGrants: + type: array + items: + $ref: '#/components/schemas/CollectionGrant' + uniqueItems: true + UserId: + $ref: '#/components/schemas/StringIntId' + UserIdNullable: + $ref: '#/components/schemas/StringIntIdNullable' + UserLastAccess: + $ref: '#/components/schemas/IntegerMinimumZeroNullable' + UserPatch: + additionalProperties: false + minProperties: 1 + type: object + properties: + collectionGrants: + type: array + items: + $ref: '#/components/schemas/CollectionGrant' + uniqueItems: true + userGroups: + type: array + items: + $ref: '#/components/schemas/UserGroupId' + uniqueItems: true + username: + $ref: '#/components/schemas/Username' + status: + $ref: '#/components/schemas/UserStatus' + UserPost: + additionalProperties: false + type: object + properties: + collectionGrants: + type: array + items: + $ref: '#/components/schemas/CollectionGrant' + uniqueItems: true + userGroups: + type: array + items: + $ref: '#/components/schemas/UserGroupId' + uniqueItems: true + username: + $ref: '#/components/schemas/Username' + required: + - collectionGrants + - username + UserPut: + additionalProperties: false + type: object + properties: + collectionGrants: + type: array + items: + $ref: '#/components/schemas/CollectionGrant' + uniqueItems: true + userGroups: + type: array + items: + $ref: '#/components/schemas/UserGroupId' + uniqueItems: true + username: + $ref: '#/components/schemas/Username' + status: + $ref: '#/components/schemas/UserStatus' + required: + - collectionGrants + - username + UserPrivileges: + type: object + additionalProperties: false + properties: + admin: + type: boolean + create_collection: + type: boolean + UserProjected: + additionalProperties: false + type: object + properties: + collectionGrants: + type: array + items: + $ref: '#/components/schemas/CollectionGrantProjected' + displayName: + $ref: '#/components/schemas/DisplayName' + email: + nullable: true + type: string + lastAccess: + $ref: '#/components/schemas/UserLastAccess' + privileges: + $ref: '#/components/schemas/UserPrivileges' + statistics: + $ref: '#/components/schemas/UserStatistics' + status: + $ref: '#/components/schemas/UserStatus' + statusDate: + $ref: '#/components/schemas/UserStatusDate' + statusUser: + $ref: '#/components/schemas/UserStatusUser' + userGroups: + type: array + items: + $ref: '#/components/schemas/UserGroupBasic' + userId: + $ref: '#/components/schemas/UserId' + username: + $ref: '#/components/schemas/Username' + webPreferences: + $ref: '#/components/schemas/WebPreferences' + required: + - userId + - username + - displayName + - email + - lastAccess + UserStatus: + type: string + enum: + - available + - unavailable + UserStatusDate: + $ref: '#/components/schemas/StringDateTime' + UserStatusUser: + $ref: '#/components/schemas/StringIntIdNullable' + UserStatistics: + additionalProperties: false + type: object + properties: + collectionGrantCount: + type: integer + created: + $ref: '#/components/schemas/Created' + lastClaims: + type: object + required: + - created + - collectionGrantCount + - lastClaims + Username: + $ref: '#/components/schemas/String255' + UsernameNullable: + $ref: '#/components/schemas/String255Nullable' + WebPreferences: + type: object + properties: + darkMode: + type: boolean + lastWhatsNew: + type: string + format: date + additionalProperties: false + required: + - darkMode + - lastWhatsNew + WebPreferencesPatch: + type: object + properties: + darkMode: + type: boolean + lastWhatsNew: + type: string + format: date + additionalProperties: false + minProperties: 1 + Version: + description: | + Semver as defined by the BNF at semver.org + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$ + type: string + VersionString: + $ref: '#/components/schemas/String255' + parameters: + AppDataFormatQuery: + name: format + in: query + description: The format of the appdata + schema: + $ref: '#/components/schemas/AppDataFormat' + AssetIdArrayQuery: + name: assetId + in: query + description: A query parameter that identifies a list of Assets + schema: + type: array + uniqueItems: true + minItems: 1 + items: + $ref: '#/components/schemas/AssetId' + AssetIdPath: + name: assetId + in: path + description: A path parameter that identifies an Asset + required: true + schema: + $ref: '#/components/schemas/AssetId' + AssetIdQuery: + name: assetId + in: query + description: A query parameter that identifies an Asset + schema: + $ref: '#/components/schemas/AssetId' + AssetProjectionQuery: + name: projection + in: query + description: Additional properties to include in the response. + style: form + explode: true + schema: + type: array + uniqueItems: true + minItems: 1 + items: + type: string + enum: + - statusStats + - stigs + BenchmarkIdArrayQuery: + name: benchmarkId + in: query + description: Filter by one or more benchmarkIds + schema: + type: array + uniqueItems: true + minItems: 1 + items: + $ref: '#/components/schemas/BenchmarkId' + BenchmarkIdPath: + name: benchmarkId + in: path + description: A path parameter that identifies a STIG + required: true + schema: + $ref: '#/components/schemas/BenchmarkId' + BenchmarkIdQuery: + name: benchmarkId + in: query + description: A query parameter that identifies a STIG + schema: + $ref: '#/components/schemas/BenchmarkId' + CciProjectionQuery: + name: projection + in: query + description: Additional properties to include in the response. + style: form + explode: true + schema: + type: array + uniqueItems: true + minItems: 1 + items: + type: string + enum: + - emassAp + - stigs + - references + CciQuery: + name: cci + in: query + description: A query parameter that identifies a CCI + schema: + $ref: '#/components/schemas/CciString' + CklModeQuery: + name: mode + in: query + description: A query parameter that describes the CKL mode + schema: + type: string + default: mono + enum: + - multi + - mono + CollectionIdPath: + name: collectionId + in: path + description: A path parameter that identifies a Collection + required: true + schema: + $ref: '#/components/schemas/CollectionId' + CollectionIdQuery: + name: collectionId + required: true + in: query + description: A query parameter that identifies a Collection + schema: + $ref: '#/components/schemas/CollectionId' + CollectionIdArrayQuery: + name: collectionId + required: false + in: query + description: Filter by one or more collectionIds + schema: + type: array + uniqueItems: true + minItems: 1 + items: + $ref: '#/components/schemas/CollectionId' + CollectionProjectionQuery: + name: projection + in: query + description: Additional properties to include in the response. + style: form + explode: true + schema: + type: array + uniqueItems: true + minItems: 1 + items: + type: string + enum: + - assets + - grants + - users + - owners + - statistics + - stigs + - labels + CollectionsProjectionQuery: + name: projection + in: query + description: Additional properties to include in the response. + style: form + explode: true + schema: + type: array + uniqueItems: true + minItems: 1 + items: + type: string + enum: + - owners + - statistics + CollectionStigProjectionQuery: + name: projection + in: query + description: Additional properties to include in the response. + style: form + explode: true + schema: + type: array + uniqueItems: true + minItems: 1 + items: + type: string + enum: + - assets + DryRunQuery: + name: dryRun + in: query + description: If set to `true`, performs validation without persisting data. + required: false + schema: + type: boolean + DstCollectionIdPath: + name: dstCollectionId + in: path + description: A path parameter that identifies a Collection + required: true + schema: + $ref: '#/components/schemas/CollectionId' + EndDateQuery: + name: endDate + in: query + description: History entries with a timestamp after the specified end date. + schema: + $ref: '#/components/schemas/StringDate' + ElevateQuery: + name: elevate + in: query + description: Elevate the user context for this request if user is permitted (canAdmin) + schema: + type: boolean + default: false + FindingAggregatorQuery: + name: aggregator + required: true + in: query + description: Aggregate the findings on this property + schema: + type: string + minLength: 1 + enum: + - ruleId + - groupId + - cci + FindingProjectionQuery: + name: projection + in: query + description: Optional properties to return + style: form + explode: true + schema: + type: array + uniqueItems: true + minItems: 1 + items: + type: string + enum: + - assets + - groups + - rules + - stigs + - ccis + ForceQuery: + name: force + in: query + description: Force an action, such as a delete, that would otherwise not be permitted + schema: + type: boolean + default: false + GrantIdPath: + name: grantId + in: path + description: A path parameter that identifies a Grant + required: true + schema: + $ref: '#/components/schemas/GrantId' + GroupIdQuery: + name: groupId + in: query + description: A query parameter that identifies a Group + schema: + $ref: '#/components/schemas/GroupId' + GroupProjectionQuery: + name: projection + in: query + description: Additional properties to include in the response. + style: form + explode: true + schema: + type: array + uniqueItems: true + minItems: 1 + items: + type: string + enum: + - rules + JobIdPath: + name: jobId + in: path + description: A path parameter that identifies a Job + required: true + schema: + $ref: '#/components/schemas/JobId' + JobRunIdPath: + name: runId + in: path + description: A path parameter that identifies a Job Run + required: true + schema: + $ref: '#/components/schemas/JobRunId' + JsonPathQuery: + name: jsonpath + in: query + description: A JSONPath expression + schema: + $ref: '#/components/schemas/String255' + LabelIdPath: + name: labelId + in: path + required: true + description: A path parameter that specifies a Label + schema: + $ref: '#/components/schemas/LabelId' + LabelIdQuery: + name: labelId + in: query + description: Selects Assets by labelId + schema: + type: array + uniqueItems: true + minItems: 1 + items: + $ref: '#/components/schemas/LabelId' + LabelMatchQuery: + name: labelMatch + in: query + description: Selectes Assets without labels + schema: + type: string + enum: + - 'null' + LabelNameQuery: + name: labelName + in: query + description: Selectes Assets by label name + schema: + type: array + uniqueItems: true + minItems: 1 + items: + $ref: '#/components/schemas/LabelName' + MetadataKeyPath: + name: key + in: path + required: true + description: A path parameter that specifies a metadata key + schema: + pattern: '^([\w\.]+)$' + type: string + MetadataQuery: + name: metadata + in: query + description: A query parameter that specifies metadata key:value pairs to select matching Objects + schema: + type: array + uniqueItems: true + minItems: 1 + items: + pattern: '^([\w\.]+:.*?)$' + type: string + MetricsFormatQuery: + name: format + in: query + description: The format of the response body + schema: + type: string + default: 'json' + enum: + - json + - csv + NameQuery: + name: name + in: query + description: Matches against the name according to the `name-match` parameter + schema: + type: string + NameMatchQuery: + name: name-match + in: query + description: How to match against the `name` parameter + schema: + type: string + default: exact + enum: + - exact + - startsWith + - endsWith + - contains + PoamAggregatorQuery: + name: aggregator + required: true + in: query + description: Aggregate the findings on this property + schema: + type: string + enum: + - ruleId + - groupId + PoamFormatQuery: + name: format + in: query + description: Value for POAM format (ie. EMASS, MCCAST) + schema: + type: string + enum: + - EMASS + - MCCAST + default: EMASS + PrivilegeQuery: + name: privilege + in: query + description: Selects Users with the specified privilege + schema: + type: string + enum: + - admin + - create_collection + RetentionDateQuery: + name: retentionDate + in: query + description: Delete history entries with a timestamp earlier than the specified retention date. + required: true + schema: + $ref: '#/components/schemas/StringDate' + ReviewProjectionQuery: + name: projection + in: query + description: Additional properties to include in the response. + style: form + explode: true + schema: + type: array + uniqueItems: true + minItems: 1 + items: + type: string + enum: + - metadata + - rule + - stigs + - history + ReviewHistoryStatsProjectionQuery: + name: projection + in: query + description: Return review history statistics with the specified level of granularity. + style: form + explode: true + schema: + type: array + uniqueItems: true + minItems: 1 + items: + type: string + enum: + - asset + ReviewsProjectionQuery: + name: projection + in: query + description: Additional properties to include in the response. + style: form + explode: true + schema: + type: array + uniqueItems: true + minItems: 1 + items: + type: string + enum: + - metadata + - rule + - stigs + ReviewResultQuery: + name: result + in: query + schema: + $ref: '#/components/schemas/ReviewResult' + ReviewRulesQuery: + name: rules + in: query + description: + default - rules from the default revision of a STIG in the Collection.
mapped - rules from any version of a STIG assigned to the Asset + schema: + type: string + default: default-mapped + enum: + - all + - default + - default-mapped + - mapped + - not-default + - not-default-mapped + - not-mapped + ReviewStatusQuery: + name: status + in: query + schema: + $ref: '#/components/schemas/ReviewStatusLabel' + RevisionIdArrayQuery: + name: revisionId + in: query + description: Filter by one or more revisionIds (benchmarkId-version-release) If Revision specified is not the default rev for at least one Collection, response will be empty. + schema: + type: array + uniqueItems: true + minItems: 1 + items: + type: string + RevisionStrPath: + name: revisionStr + in: path + description: A path parameter that identifies a STIG revision [V{version_num}R{release_num} | 'latest' ] + required: true + schema: + $ref: '#/components/schemas/RevisionStr' + RuleIdPath: + name: ruleId + in: path + description: A path parameter that identifies a Rule + required: true + schema: + $ref: '#/components/schemas/RuleId' + RuleIdQuery: + name: ruleId + in: query + description: Selects Reviews of a Rule + schema: + $ref: '#/components/schemas/RuleId' + RuleProjectionQuery: + name: projection + in: query + description: Additional properties to include in the response. + style: form + explode: true + schema: + type: array + uniqueItems: true + minItems: 1 + items: + type: string + enum: + - detail + - ccis + - check + - fix + - ruleIds + - stigs + RuleSeverityQuery: + name: severity + in: query + description: Selects Rules with the specified severity + style: form + explode: true + schema: + type: array + uniqueItems: true + minItems: 1 + maxItems: 2 + items: + $ref: '#/components/schemas/RuleSeverity' + RunSequenceQuery: + name: after-seq + in: query + description: The starting sequence number of the run output to retrieve. If not specified, all run output is returned. + schema: + type: integer + minimum: 0 + StartDateQuery: + name: startDate + in: query + description: History entries with a timestamp before the specified start date. + schema: + $ref: '#/components/schemas/StringDate' + StigProjectionQuery: + name: projection + in: query + description: Additional properties to include in the response. + style: form + explode: true + schema: + type: array + items: + type: string + enum: + - revisions + UnreviewedAssetsProjectionQuery: + name: projection + in: query + description: Additional properties to include in the `unreviewed` objects. + style: form + explode: true + schema: + type: array + items: + type: string + enum: + - ruleTitle + - groupTitle + UnreviewedRulesProjectionQuery: + name: projection + in: query + description: Additional properties to include in the response. + style: form + explode: true + schema: + type: array + items: + type: string + enum: + - ruleTitle + - groupTitle + UserGroupIdPath: + name: userGroupId + in: path + description: A path parameter that identifies a User Group + required: true + schema: + $ref: '#/components/schemas/UserGroupId' + UserGroupProjectionQuery: + name: projection + in: query + description: Additional properties to include in the response. + style: form + explode: true + schema: + type: array + items: + type: string + enum: + - users + - collections + - collectionGrants + - attributions + UserIdPath: + name: userId + in: path + description: A path parameter that identifies a User + required: true + schema: + $ref: '#/components/schemas/UserId' + UserIdQuery: + name: userId + in: query + description: A query parameter that identifies a User + schema: + $ref: '#/components/schemas/UserId' + UsernameQuery: + name: username + in: query + description: Matches against the username according to the `username-match` parameter + schema: + $ref: '#/components/schemas/Username' + UsernameMatchQuery: + name: username-match + in: query + description: How to match against the `username` parameter + schema: + type: string + default: exact + enum: + - exact + - startsWith + - endsWith + - contains + UserStatusQuery: + name: status + in: query + description: A query parameter that identifies a UserStatus + schema: + $ref: '#/components/schemas/UserStatus' + UserPreferenceQuery: + name: projection + in: query + description: A query parameter that identifies a UserPreference + schema: + type: string + enum: + - webPreferences + UserProjectionQuery: + name: projection + in: query + description: Additional properties to include in the response. + style: form + explode: true + schema: + type: array + uniqueItems: true + minItems: 1 + items: + type: string + enum: + - collectionGrants + - statistics + - userGroups + - webPreferences + responses: + Forbidden: + description: The requesting User does not have access rights to the content + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + securitySchemes: + oauth: + type: openIdConnect + openIdConnectUrl: http://localhost:8080/realms/stigman/.well-known/openid-configuration +# supported oauth scopes: +# - stig-manager +# - 'stig-manager:op' +# - 'stig-manager:op:read' +# - 'stig-manager:stig' +# - 'stig-manager:stig:read' +# - 'stig-manager:collection' +# - 'stig-manager:collection:read' +# - 'stig-manager:user' +# - 'stig-manager:user:read' diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..38d3b78 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,18 @@ +{ + "name": "docs", + "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/starlight": "^0.39.2", + "astro": "^6.3.1", + "sharp": "^0.34.5", + "starlight-openapi": "^0.25.2" + } +} \ No newline at end of file diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml new file mode 100644 index 0000000..34f6583 --- /dev/null +++ b/docs/pnpm-lock.yaml @@ -0,0 +1,4526 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@astrojs/starlight': + specifier: ^0.39.2 + version: 0.39.2(astro@6.3.5(@types/node@24.12.4)(rollup@4.60.4)) + astro: + specifier: ^6.3.1 + version: 6.3.5(@types/node@24.12.4)(rollup@4.60.4) + sharp: + specifier: ^0.34.5 + version: 0.34.5 + starlight-openapi: + specifier: ^0.25.2 + version: 0.25.2(@astrojs/markdown-remark@7.1.2)(@astrojs/starlight@0.39.2(astro@6.3.5(@types/node@24.12.4)(rollup@4.60.4)))(astro@6.3.5(@types/node@24.12.4)(rollup@4.60.4))(openapi-types@12.1.3) + +packages: + + '@apidevtools/json-schema-ref-parser@13.0.5': + resolution: {integrity: sha512-xfh4xVJD62gG6spIc7lwxoWT+l16nZu1ELyU8FkjaP/oD2yP09EvLAU6KhtudN9aML2Khhs9pY6Slr7KGTES3w==} + engines: {node: '>= 16'} + + '@astrojs/compiler@4.0.0': + resolution: {integrity: sha512-eouss7G8ygdZqHuke033VMcVw5HTZUu+PXd/h06DGDUg/jt5btPYPqh66ENWw/mU78rBrf/oeC4oqoBwMtDMNA==} + + '@astrojs/internal-helpers@0.9.1': + resolution: {integrity: sha512-1pWuARqYom/TzuU3+0ZugsTrKlUydWKuULmDqSMTuonY+9IRDUEGKX/8PXQ1nBxRq3w85uGtd9q9SXfqEldMIQ==} + + '@astrojs/markdown-remark@7.1.2': + resolution: {integrity: sha512-caXZ4Dc2St2dW8luEg22GlP0gupLdztCTQE4EzZOxW1pqWXz9mbeJEuHUkgDYcKWW8tjIHkydYDhWLVoxJ327Q==} + + '@astrojs/mdx@5.0.6': + resolution: {integrity: sha512-4dKe0ZMmqujofPNDHahzClkwinn9f8jHPcaXcgdGvPAlboD2mjzkUCofli2cBnxYAkdfhC6d50gBJ8i/cH8gHw==} + engines: {node: '>=22.12.0'} + peerDependencies: + astro: ^6.0.0 + + '@astrojs/prism@4.0.2': + resolution: {integrity: sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==} + engines: {node: '>=22.12.0'} + + '@astrojs/sitemap@3.7.2': + resolution: {integrity: sha512-PqkzkcZTb5ICiyIR8VoKbIAP/laNRXi5tw616N1Ckk+40oNB8Can1AzVV56lrbC5GKSZFCyJYUVYqVivMisvpA==} + + '@astrojs/starlight@0.39.2': + resolution: {integrity: sha512-vlw+bwnjtf5buCTUtLU7JfV6D3knslxqnspr6LKs6hfRuFZiyr5hT44F7GyDqR9FKANUqFxnIzWM81F1k/kOUA==} + peerDependencies: + astro: ^6.0.0 + + '@astrojs/telemetry@3.3.2': + resolution: {integrity: sha512-j8DNruA8ors99Al39RYZPJK4DC1bKkoNm93mAMuBhY9TCNC4R8n1q7ovFnJ5qhGh5Lsh7pa1gpQVpYpsJPeTHQ==} + engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} + + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.3': + resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + + '@capsizecss/unpack@4.0.0': + resolution: {integrity: sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==} + engines: {node: '>=18'} + + '@clack/core@1.3.1': + resolution: {integrity: sha512-fT1qHVGAag4IEkrupZ6lRRbNCs1vS9P01KB/sG8zKgvUztbYtFBtQpjSITNwooDZ83tpsPzP0mRNs1/KVszCRA==} + engines: {node: '>= 20.12.0'} + + '@clack/prompts@1.4.0': + resolution: {integrity: sha512-S0My7XPGIgpRWMDG8uRqalbgT+a6FmCUdOW+HaIOVVpUPHOb7RrpvjTjiODadKp06fsrVDJZlIzc6yCTp4AnxA==} + engines: {node: '>= 20.12.0'} + + '@ctrl/tinycolor@4.2.0': + resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} + engines: {node: '>=14'} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@expressive-code/core@0.42.0': + resolution: {integrity: sha512-MN11+9nfmaC7sYu2BZJXAXqwkBRt8t1xTSqP+Ti1NfTEskgl6xUnzDxoaiQkg0BMzpglA0pys4dpDKquP/cyIw==} + + '@expressive-code/plugin-frames@0.42.0': + resolution: {integrity: sha512-XtkPm+941Uta7Y+81Acv+OA/20F1NJmJhCX6UYGKpqEIGqplNh3PTOhcURp6tcruhlzJcWcvpWy6Oigz3SrjqA==} + + '@expressive-code/plugin-shiki@0.42.0': + resolution: {integrity: sha512-PMKey/kLmewttAHQezL+Y5Fx3vVssfDi3+FJOYQQS2mXP3tQspFELtKKAfsXfmSXdToZYgwoO69HJndqfE+09g==} + + '@expressive-code/plugin-text-markers@0.42.0': + resolution: {integrity: sha512-l59lUx8fq1v5g6SpmbDjiU0+7IdfbiWnAyRmtTVSpfhyq+nZMN4UcmYyu2b9Mynhzt7Gr+O+cXyEPDNb2AVWVQ==} + + '@humanwhocodes/momoa@2.0.4': + resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} + engines: {node: '>=10.10.0'} + + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + + '@oslojs/encoding@1.1.0': + resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + + '@pagefind/darwin-arm64@1.5.2': + resolution: {integrity: sha512-MXpI+7HsAdPkvJ0gk9xj9g541BCqBZOBbdwj9g6lB5LCj6kSV6nqDSjzcAJwvOsfu0fjwvC8hQU+ecfhp+MpiQ==} + cpu: [arm64] + os: [darwin] + + '@pagefind/darwin-x64@1.5.2': + resolution: {integrity: sha512-IojxFWMEJe0RQ7PQ3KXQsPIImNsbpPYpoZ+QUDrL8fAl/O27IX+LVLs74/UzEZy5uA2LD8Nz1AiwKr72vrkZQw==} + cpu: [x64] + os: [darwin] + + '@pagefind/default-ui@1.5.2': + resolution: {integrity: sha512-pm1LMnQg8N2B3n2TnjKlhaFihpz6zTiA4HiGQ6/slKO/+8K9CAU5kcjdSSPgpuk1PMuuN4hxLipUIifnrkl3Sg==} + + '@pagefind/freebsd-x64@1.5.2': + resolution: {integrity: sha512-7EVzo9+0w+2cbe671BtMj10UlNo83I+HrLVLfRxO731svHRJKUfJ/mo05gU14pe9PCfpKNQT8FS3Xc/oDN6pOA==} + cpu: [x64] + os: [freebsd] + + '@pagefind/linux-arm64@1.5.2': + resolution: {integrity: sha512-Ovt9+K35sqzn8H3ZMXGwls4TD/wMJuvRtShHIsmUQREmaxjrDEX7gHckRCrwYJ4XE1H1p6HkLz3wukrAnsfXQw==} + cpu: [arm64] + os: [linux] + + '@pagefind/linux-x64@1.5.2': + resolution: {integrity: sha512-V+tFqHKXhQKq/WqPBD67AFy7scn1/aZID00ws4fSDd+1daSi5UHR9VVlRrOUYKxn3VuFQYRD7lYXdZK1WED1YA==} + cpu: [x64] + os: [linux] + + '@pagefind/windows-arm64@1.5.2': + resolution: {integrity: sha512-hN9Nh90fNW61nNRCW9ZyQrAj/mD0eRvmJ8NlTUzkbuW8kIzGJUi3cxjFkEcMZ5h/8FsKWD/VcouZl4yo1F7B6g==} + cpu: [arm64] + os: [win32] + + '@pagefind/windows-x64@1.5.2': + resolution: {integrity: sha512-Fa2Iyw7kaDRzGMfNYNUXNW2zbL5FQVDgSOcbDHdzBrDEdpqOqg8TcZ68F22ol6NJ9IGzvUdmeyZypLW5dyhqsg==} + cpu: [x64] + os: [win32] + + '@readme/better-ajv-errors@2.4.0': + resolution: {integrity: sha512-9WODaOAKSl/mU+MYNZ2aHCrkoRSvmQ+1YkLj589OEqqjOAhbn8j7Z+ilYoiTu/he6X63/clsxxAB4qny9/dDzg==} + engines: {node: '>=18'} + peerDependencies: + ajv: 4.11.8 - 8 + + '@readme/openapi-parser@4.1.2': + resolution: {integrity: sha512-lAFH88r/CHs5VZDUocEda0OSMSQsr6801sziIjOKyVA+0hSFN+BPuelPF5XvkMROHecnPd+XEJN1iNQqCgER/g==} + engines: {node: '>=20'} + peerDependencies: + openapi-types: '>=7' + + '@readme/openapi-schemas@3.1.0': + resolution: {integrity: sha512-9FC/6ho8uFa8fV50+FPy/ngWN53jaUu4GRXlAjcxIRrzhltJnpKkBG2Tp0IDraFJeWrOpk84RJ9EMEEYzaI1Bw==} + engines: {node: '>=18'} + + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.60.4': + resolution: {integrity: sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.60.4': + resolution: {integrity: sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.60.4': + resolution: {integrity: sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.60.4': + resolution: {integrity: sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.60.4': + resolution: {integrity: sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.60.4': + resolution: {integrity: sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.60.4': + resolution: {integrity: sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.60.4': + resolution: {integrity: sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.60.4': + resolution: {integrity: sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.60.4': + resolution: {integrity: sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.60.4': + resolution: {integrity: sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-loong64-musl@4.60.4': + resolution: {integrity: sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.60.4': + resolution: {integrity: sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-ppc64-musl@4.60.4': + resolution: {integrity: sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.60.4': + resolution: {integrity: sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.60.4': + resolution: {integrity: sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.60.4': + resolution: {integrity: sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.60.4': + resolution: {integrity: sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.60.4': + resolution: {integrity: sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openbsd-x64@4.60.4': + resolution: {integrity: sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.60.4': + resolution: {integrity: sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.60.4': + resolution: {integrity: sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.60.4': + resolution: {integrity: sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.60.4': + resolution: {integrity: sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.60.4': + resolution: {integrity: sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==} + cpu: [x64] + os: [win32] + + '@shikijs/core@4.0.2': + resolution: {integrity: sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==} + engines: {node: '>=20'} + + '@shikijs/engine-javascript@4.0.2': + resolution: {integrity: sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==} + engines: {node: '>=20'} + + '@shikijs/engine-oniguruma@4.0.2': + resolution: {integrity: sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==} + engines: {node: '>=20'} + + '@shikijs/langs@4.0.2': + resolution: {integrity: sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==} + engines: {node: '>=20'} + + '@shikijs/primitive@4.0.2': + resolution: {integrity: sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==} + engines: {node: '>=20'} + + '@shikijs/themes@4.0.2': + resolution: {integrity: sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==} + engines: {node: '>=20'} + + '@shikijs/types@4.0.2': + resolution: {integrity: sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==} + engines: {node: '>=20'} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/js-yaml@4.0.9': + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/nlcst@2.0.3': + resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} + + '@types/node@24.12.4': + resolution: {integrity: sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==} + + '@types/sax@1.2.7': + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@ungap/structured-clone@1.3.1': + resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + + 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'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-iterate@2.0.1: + resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + + astro-expressive-code@0.42.0: + resolution: {integrity: sha512-aiTePi2Cn0mJPYWZSzP1GcxCinX9mNtJyCCshVVPSg1yRwM7ADvFJOx0FnS440M9t65hp8JH//dc2qr22Bm4ag==} + peerDependencies: + astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta + + astro@6.3.5: + resolution: {integrity: sha512-gU+4KedkbTuVgz7YoVAN+9Ftnq0GaYwejxK2NbqDzB0M9dWd0f3kXZBuaM9hzbchRFoRAJfJjFtdX9LK6Ir7ZA==} + engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'} + hasBin: true + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + bcp-47-match@2.0.3: + resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} + + bcp-47@2.1.0: + resolution: {integrity: sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + + 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==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + common-ancestor-path@2.0.0: + resolution: {integrity: sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==} + engines: {node: '>= 18'} + + cookie-es@1.2.3: + resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==} + + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + + crossws@0.3.5: + resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} + + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-selector-parser@3.3.0: + resolution: {integrity: sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + devalue@5.8.1: + resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + diff@8.0.4: + resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} + engines: {node: '>=0.3.1'} + + direction@2.0.1: + resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} + hasBin: true + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + 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-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + + 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'} + + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + + estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + + estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + event-stream@4.0.1: + resolution: {integrity: sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==} + + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + + expressive-code@0.42.0: + resolution: {integrity: sha512-V5DtJLEKuj4wf9O6IRtPtRObkMVy2ggR+S0MdjrTw6m58krZnDioyhW1si3Y04c5YPeooP4nd85Yq9NwEVHS4g==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + + fast-wrap-ansi@0.2.0: + resolution: {integrity: sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + flattie@1.1.1: + resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} + engines: {node: '>=8'} + + fontace@0.4.1: + resolution: {integrity: sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==} + + fontkitten@1.0.3: + resolution: {integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==} + engines: {node: '>=20'} + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + from@0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + + 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-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-tsconfig@5.0.0-beta.4: + resolution: {integrity: sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==} + engines: {node: '>=20.20.0'} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + h3@1.15.11: + resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==} + + har-validator-compiled@1.0.0: + resolution: {integrity: sha512-dher7nFSx+Ef6OoqVveLClh8itAR3vd8Qx70Lh/hEgP1iGeARAolbci7Y8JBrHIYgFCT6xRdvvL16AR9Zh07Dw==} + + 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.3: + resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} + engines: {node: '>= 0.4'} + + hast-util-embedded@3.0.0: + resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} + + hast-util-format@1.1.0: + resolution: {integrity: sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==} + + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + + hast-util-has-property@3.0.0: + resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + + hast-util-is-body-ok-link@3.0.1: + resolution: {integrity: sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==} + + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + + hast-util-minify-whitespace@1.0.1: + resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-phrasing@3.0.1: + resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==} + + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + + hast-util-select@6.0.4: + resolution: {integrity: sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==} + + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-to-parse5@8.0.1: + resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} + + hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + + html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + html-whitespace-sensitive-tag-names@3.0.1: + resolution: {integrity: sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + httpsnippet@3.0.10: + resolution: {integrity: sha512-1P102HsVslaT3IVfuUfVwxenfbogFiihqosnaKUScd/sON1omdZZCWdmzm6baRz4u1Va0CTI/7svLckCu9iNBw==} + engines: {node: '>=20'} + hasBin: true + + i18next@26.2.0: + resolution: {integrity: sha512-zwBHldHdTmwN7r6UNc7lC6GWNN+YYg3DrRSeHR5PRRBf5QnJZcYHrQc0uaU26qZeYxR7iFZD+Y315dPnKP47wA==} + peerDependencies: + typescript: ^5 || ^6 + peerDependenciesMeta: + typescript: + optional: true + + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + + iron-webcrypto@1.2.1: + resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + 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-docker@4.0.0: + resolution: {integrity: sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==} + engines: {node: '>=20'} + hasBin: true + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + + klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + lru-cache@11.4.0: + resolution: {integrity: sha512-W+R+kFL4HgVxONq2bhXPi3bGpzGe/yEhVOp233qw9wCRtgncJ15P3bC+e4zZMu4Cq7d+WAJjXGW0uUkifhcatA==} + engines: {node: 20 || >=22} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + magicast@0.5.3: + resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} + + map-stream@0.0.7: + resolution: {integrity: sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==} + + markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mdast-util-definitions@6.0.0: + resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} + + mdast-util-directive@3.1.0: + resolution: {integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-directive@4.0.0: + resolution: {integrity: sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + + 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'} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + neotraverse@0.6.18: + resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} + engines: {node: '>= 10'} + + nlcst-to-string@4.0.0: + resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} + + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + + node-mock-http@1.0.4: + resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + + ofetch@1.5.1: + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + oniguruma-parser@0.12.2: + resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + + oniguruma-to-es@4.3.6: + resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + + p-limit@7.3.0: + resolution: {integrity: sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==} + engines: {node: '>=20'} + + p-queue@9.3.0: + resolution: {integrity: sha512-7NED7xhQ74Ngp4JP/2e0VZHp7vSWfJfqeiR92jPgxsz6m0Se4P03YoTKa9dDXyZ3r6P616gUXttrB6nnHYKang==} + engines: {node: '>=20'} + + p-timeout@7.0.1: + resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==} + engines: {node: '>=20'} + + package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + + pagefind@1.5.2: + resolution: {integrity: sha512-XTUaK0hXMCu2jszWE584JGQT7y284TmMV9l/HX3rnG5uo3rHI/uHU56XTyyyPFjeWEBxECbAi0CaFDJOONtG0Q==} + hasBin: true + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + parse-latin@7.0.0: + resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + pause-stream@0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + + piccolore@0.1.3: + resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss@8.5.14: + resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} + engines: {node: ^10 || ^12 || >=14} + + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + radix3@1.1.2: + resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + + rehype-expressive-code@0.42.0: + resolution: {integrity: sha512-8rp/1YMEVVSYbtz+bFBx+uSx3vA4i4T8RwRm5Q/IWbucQnnQqQ0hDqtmKOr8tv+59Cik6cu5aH3WPo0I7csuTA==} + + rehype-format@5.0.1: + resolution: {integrity: sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==} + + rehype-parse@9.0.1: + resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + + rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + + rehype@13.0.2: + resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} + + remark-directive@4.0.0: + resolution: {integrity: sha512-7sxn4RfF1o3izevPV1DheyGDD6X4c9hrGpfdUpm7uC++dqrnJxIZVkk7CoKqcLm0VUMAuOol7Mno3m6g8cfMuA==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-smartypants@3.0.2: + resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} + engines: {node: '>=16.0.0'} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + 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'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + retext-latin@4.0.0: + resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} + + retext-smartypants@6.2.0: + resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} + + retext-stringify@4.0.0: + resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} + + retext@9.0.0: + resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} + + rollup@4.60.4: + resolution: {integrity: sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} + engines: {node: '>=11.0.0'} + + semver@7.8.0: + resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} + engines: {node: '>=10'} + hasBin: true + + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shiki@4.0.2: + resolution: {integrity: sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==} + engines: {node: '>=20'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + sitemap@9.0.1: + resolution: {integrity: sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==} + engines: {node: '>=20.19.5', npm: '>=10.8.2'} + hasBin: true + + smol-toml@1.6.1: + resolution: {integrity: sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==} + engines: {node: '>= 18'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + split@1.0.1: + resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} + + starlight-openapi@0.25.2: + resolution: {integrity: sha512-aDqW1m2csUuq7LcyvBTDL+KCN23hA9/3kNups6TutdlyC68s0wzWGFiA4EFu1m8uKpsepC4HErMTCW03i/aIcw==} + engines: {node: '>=22.12.0'} + peerDependencies: + '@astrojs/markdown-remark': '>=7.0.0' + '@astrojs/starlight': '>=0.38.0' + astro: '>=6.0.0' + + stream-combiner@0.2.2: + resolution: {integrity: sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==} + + stream-replace-string@2.0.0: + resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + svgo@4.0.1: + resolution: {integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==} + engines: {node: '>=16'} + hasBin: true + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + + tinyclip@0.1.12: + resolution: {integrity: sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA==} + engines: {node: ^16.14.0 || >= 17.3.0} + + tinyexec@1.1.2: + resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} + engines: {node: '>=18'} + + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + + ultrahtml@1.6.0: + resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} + + uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unifont@0.7.4: + resolution: {integrity: sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==} + + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-modify-children@4.0.0: + resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-children@3.0.0: + resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + + unstorage@1.17.5: + resolution: {integrity: sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==} + peerDependencies: + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 + '@azure/identity': ^4.6.0 + '@azure/keyvault-secrets': ^4.9.0 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6 || ^7 || ^8 + '@deno/kv': '>=0.9.0' + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.1' + '@vercel/functions': ^2.2.12 || ^3.0.0 + '@vercel/kv': ^1 || ^2 || ^3 + aws4fetch: ^1.0.20 + db0: '>=0.2.1' + idb-keyval: ^6.2.1 + ioredis: ^5.4.2 + uploadthing: ^7.4.4 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@deno/kv': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/blob': + optional: true + '@vercel/functions': + optional: true + '@vercel/kv': + optional: true + aws4fetch: + optional: true + db0: + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + uploadthing: + optional: true + + url-template@3.1.1: + resolution: {integrity: sha512-4oszoaEKE/mQOtAmdMWqIRHmkxWkUZMnXFnjQ5i01CuRSK3uluxcH1MRVVVWmhlnzT1SCDfKxxficm2G37qzCA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@7.3.3: + resolution: {integrity: sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitefu@1.1.3: + resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + vite: + optional: true + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + which-pm-runs@1.1.0: + resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} + engines: {node: '>=4'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + xxhash-wasm@1.1.0: + resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} + engines: {node: '>=12.20'} + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@apidevtools/json-schema-ref-parser@13.0.5': + dependencies: + '@types/json-schema': 7.0.15 + js-yaml: 4.1.1 + + '@astrojs/compiler@4.0.0': {} + + '@astrojs/internal-helpers@0.9.1': + dependencies: + picomatch: 4.0.4 + + '@astrojs/markdown-remark@7.1.2': + dependencies: + '@astrojs/internal-helpers': 0.9.1 + '@astrojs/prism': 4.0.2 + github-slugger: 2.0.0 + hast-util-from-html: 2.0.3 + hast-util-to-text: 4.0.2 + js-yaml: 4.1.1 + mdast-util-definitions: 6.0.0 + rehype-raw: 7.0.0 + rehype-stringify: 10.0.1 + remark-gfm: 4.0.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + remark-smartypants: 3.0.2 + retext-smartypants: 6.2.0 + shiki: 4.0.2 + smol-toml: 1.6.1 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.1.0 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@astrojs/mdx@5.0.6(astro@6.3.5(@types/node@24.12.4)(rollup@4.60.4))': + dependencies: + '@astrojs/markdown-remark': 7.1.2 + '@mdx-js/mdx': 3.1.1 + acorn: 8.16.0 + astro: 6.3.5(@types/node@24.12.4)(rollup@4.60.4) + es-module-lexer: 2.1.0 + estree-util-visit: 2.0.0 + hast-util-to-html: 9.0.5 + piccolore: 0.1.3 + rehype-raw: 7.0.0 + remark-gfm: 4.0.1 + remark-smartypants: 3.0.2 + source-map: 0.7.6 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@astrojs/prism@4.0.2': + dependencies: + prismjs: 1.30.0 + + '@astrojs/sitemap@3.7.2': + dependencies: + sitemap: 9.0.1 + stream-replace-string: 2.0.0 + zod: 4.4.3 + + '@astrojs/starlight@0.39.2(astro@6.3.5(@types/node@24.12.4)(rollup@4.60.4))': + dependencies: + '@astrojs/markdown-remark': 7.1.2 + '@astrojs/mdx': 5.0.6(astro@6.3.5(@types/node@24.12.4)(rollup@4.60.4)) + '@astrojs/sitemap': 3.7.2 + '@pagefind/default-ui': 1.5.2 + '@types/hast': 3.0.4 + '@types/js-yaml': 4.0.9 + '@types/mdast': 4.0.4 + astro: 6.3.5(@types/node@24.12.4)(rollup@4.60.4) + astro-expressive-code: 0.42.0(astro@6.3.5(@types/node@24.12.4)(rollup@4.60.4)) + bcp-47: 2.1.0 + hast-util-from-html: 2.0.3 + hast-util-select: 6.0.4 + hast-util-to-string: 3.0.1 + hastscript: 9.0.1 + i18next: 26.2.0 + js-yaml: 4.1.1 + klona: 2.0.6 + magic-string: 0.30.21 + mdast-util-directive: 3.1.0 + mdast-util-to-markdown: 2.1.2 + mdast-util-to-string: 4.0.0 + pagefind: 1.5.2 + rehype: 13.0.2 + rehype-format: 5.0.1 + remark-directive: 4.0.0 + ultrahtml: 1.6.0 + unified: 11.0.5 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + - typescript + + '@astrojs/telemetry@3.3.2': + dependencies: + ci-info: 4.4.0 + dset: 3.1.4 + is-docker: 4.0.0 + is-wsl: 3.1.1 + which-pm-runs: 1.1.0 + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/parser@7.29.3': + dependencies: + '@babel/types': 7.29.0 + + '@babel/runtime@7.29.2': {} + + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@capsizecss/unpack@4.0.0': + dependencies: + fontkitten: 1.0.3 + + '@clack/core@1.3.1': + dependencies: + fast-wrap-ansi: 0.2.0 + sisteransi: 1.0.5 + + '@clack/prompts@1.4.0': + dependencies: + '@clack/core': 1.3.1 + fast-string-width: 3.0.2 + fast-wrap-ansi: 0.2.0 + sisteransi: 1.0.5 + + '@ctrl/tinycolor@4.2.0': {} + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.27.7': + optional: true + + '@esbuild/android-arm64@0.27.7': + optional: true + + '@esbuild/android-arm@0.27.7': + optional: true + + '@esbuild/android-x64@0.27.7': + optional: true + + '@esbuild/darwin-arm64@0.27.7': + optional: true + + '@esbuild/darwin-x64@0.27.7': + optional: true + + '@esbuild/freebsd-arm64@0.27.7': + optional: true + + '@esbuild/freebsd-x64@0.27.7': + optional: true + + '@esbuild/linux-arm64@0.27.7': + optional: true + + '@esbuild/linux-arm@0.27.7': + optional: true + + '@esbuild/linux-ia32@0.27.7': + optional: true + + '@esbuild/linux-loong64@0.27.7': + optional: true + + '@esbuild/linux-mips64el@0.27.7': + optional: true + + '@esbuild/linux-ppc64@0.27.7': + optional: true + + '@esbuild/linux-riscv64@0.27.7': + optional: true + + '@esbuild/linux-s390x@0.27.7': + optional: true + + '@esbuild/linux-x64@0.27.7': + optional: true + + '@esbuild/netbsd-arm64@0.27.7': + optional: true + + '@esbuild/netbsd-x64@0.27.7': + optional: true + + '@esbuild/openbsd-arm64@0.27.7': + optional: true + + '@esbuild/openbsd-x64@0.27.7': + optional: true + + '@esbuild/openharmony-arm64@0.27.7': + optional: true + + '@esbuild/sunos-x64@0.27.7': + optional: true + + '@esbuild/win32-arm64@0.27.7': + optional: true + + '@esbuild/win32-ia32@0.27.7': + optional: true + + '@esbuild/win32-x64@0.27.7': + optional: true + + '@expressive-code/core@0.42.0': + dependencies: + '@ctrl/tinycolor': 4.2.0 + hast-util-select: 6.0.4 + hast-util-to-html: 9.0.5 + hast-util-to-text: 4.0.2 + hastscript: 9.0.1 + postcss: 8.5.14 + postcss-nested: 6.2.0(postcss@8.5.14) + unist-util-visit: 5.1.0 + unist-util-visit-parents: 6.0.2 + + '@expressive-code/plugin-frames@0.42.0': + dependencies: + '@expressive-code/core': 0.42.0 + + '@expressive-code/plugin-shiki@0.42.0': + dependencies: + '@expressive-code/core': 0.42.0 + shiki: 4.0.2 + + '@expressive-code/plugin-text-markers@0.42.0': + dependencies: + '@expressive-code/core': 0.42.0 + + '@humanwhocodes/momoa@2.0.4': {} + + '@img/colour@1.1.0': {} + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.10.0 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@mdx-js/mdx@3.1.1': + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdx': 2.0.13 + acorn: 8.16.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.16.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@oslojs/encoding@1.1.0': {} + + '@pagefind/darwin-arm64@1.5.2': + optional: true + + '@pagefind/darwin-x64@1.5.2': + optional: true + + '@pagefind/default-ui@1.5.2': {} + + '@pagefind/freebsd-x64@1.5.2': + optional: true + + '@pagefind/linux-arm64@1.5.2': + optional: true + + '@pagefind/linux-x64@1.5.2': + optional: true + + '@pagefind/windows-arm64@1.5.2': + optional: true + + '@pagefind/windows-x64@1.5.2': + optional: true + + '@readme/better-ajv-errors@2.4.0(ajv@8.20.0)': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/runtime': 7.29.2 + '@humanwhocodes/momoa': 2.0.4 + ajv: 8.20.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + picocolors: 1.1.1 + + '@readme/openapi-parser@4.1.2(openapi-types@12.1.3)': + dependencies: + '@apidevtools/json-schema-ref-parser': 13.0.5 + '@readme/better-ajv-errors': 2.4.0(ajv@8.20.0) + '@readme/openapi-schemas': 3.1.0 + '@types/json-schema': 7.0.15 + ajv: 8.20.0 + ajv-draft-04: 1.0.0(ajv@8.20.0) + openapi-types: 12.1.3 + + '@readme/openapi-schemas@3.1.0': {} + + '@rollup/pluginutils@5.3.0(rollup@4.60.4)': + dependencies: + '@types/estree': 1.0.9 + estree-walker: 2.0.2 + picomatch: 4.0.4 + optionalDependencies: + rollup: 4.60.4 + + '@rollup/rollup-android-arm-eabi@4.60.4': + optional: true + + '@rollup/rollup-android-arm64@4.60.4': + optional: true + + '@rollup/rollup-darwin-arm64@4.60.4': + optional: true + + '@rollup/rollup-darwin-x64@4.60.4': + optional: true + + '@rollup/rollup-freebsd-arm64@4.60.4': + optional: true + + '@rollup/rollup-freebsd-x64@4.60.4': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.60.4': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.60.4': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.60.4': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.60.4': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.60.4': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.60.4': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.60.4': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.60.4': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.60.4': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.60.4': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.60.4': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.60.4': + optional: true + + '@rollup/rollup-linux-x64-musl@4.60.4': + optional: true + + '@rollup/rollup-openbsd-x64@4.60.4': + optional: true + + '@rollup/rollup-openharmony-arm64@4.60.4': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.60.4': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.60.4': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.60.4': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.60.4': + optional: true + + '@shikijs/core@4.0.2': + dependencies: + '@shikijs/primitive': 4.0.2 + '@shikijs/types': 4.0.2 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@4.0.2': + dependencies: + '@shikijs/types': 4.0.2 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.6 + + '@shikijs/engine-oniguruma@4.0.2': + dependencies: + '@shikijs/types': 4.0.2 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@4.0.2': + dependencies: + '@shikijs/types': 4.0.2 + + '@shikijs/primitive@4.0.2': + dependencies: + '@shikijs/types': 4.0.2 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/themes@4.0.2': + dependencies: + '@shikijs/types': 4.0.2 + + '@shikijs/types@4.0.2': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 + + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.9 + + '@types/estree@1.0.8': {} + + '@types/estree@1.0.9': {} + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/js-yaml@4.0.9': {} + + '@types/json-schema@7.0.15': {} + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdx@2.0.13': {} + + '@types/ms@2.1.0': {} + + '@types/nlcst@2.0.3': + dependencies: + '@types/unist': 3.0.3 + + '@types/node@24.12.4': + dependencies: + undici-types: 7.16.0 + + '@types/sax@1.2.7': + dependencies: + '@types/node': 24.12.4 + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@ungap/structured-clone@1.3.1': {} + + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + + acorn@8.16.0: {} + + ajv-draft-04@1.0.0(ajv@8.20.0): + optionalDependencies: + ajv: 8.20.0 + + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.2 + 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 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.2 + + arg@5.0.2: {} + + argparse@2.0.1: {} + + aria-query@5.3.2: {} + + array-iterate@2.0.1: {} + + astring@1.9.0: {} + + astro-expressive-code@0.42.0(astro@6.3.5(@types/node@24.12.4)(rollup@4.60.4)): + dependencies: + astro: 6.3.5(@types/node@24.12.4)(rollup@4.60.4) + rehype-expressive-code: 0.42.0 + + astro@6.3.5(@types/node@24.12.4)(rollup@4.60.4): + dependencies: + '@astrojs/compiler': 4.0.0 + '@astrojs/internal-helpers': 0.9.1 + '@astrojs/markdown-remark': 7.1.2 + '@astrojs/telemetry': 3.3.2 + '@capsizecss/unpack': 4.0.0 + '@clack/prompts': 1.4.0 + '@oslojs/encoding': 1.1.0 + '@rollup/pluginutils': 5.3.0(rollup@4.60.4) + aria-query: 5.3.2 + axobject-query: 4.1.0 + ci-info: 4.4.0 + clsx: 2.1.1 + common-ancestor-path: 2.0.0 + cookie: 1.1.1 + devalue: 5.8.1 + diff: 8.0.4 + dset: 3.1.4 + es-module-lexer: 2.1.0 + esbuild: 0.27.7 + flattie: 1.1.1 + fontace: 0.4.1 + get-tsconfig: 5.0.0-beta.4 + github-slugger: 2.0.0 + html-escaper: 3.0.3 + http-cache-semantics: 4.2.0 + js-yaml: 4.1.1 + jsonc-parser: 3.3.1 + magic-string: 0.30.21 + magicast: 0.5.3 + mrmime: 2.0.1 + neotraverse: 0.6.18 + obug: 2.1.1 + p-limit: 7.3.0 + p-queue: 9.3.0 + package-manager-detector: 1.6.0 + piccolore: 0.1.3 + picomatch: 4.0.4 + rehype: 13.0.2 + semver: 7.8.0 + shiki: 4.0.2 + smol-toml: 1.6.1 + svgo: 4.0.1 + tinyclip: 0.1.12 + tinyexec: 1.1.2 + tinyglobby: 0.2.16 + ultrahtml: 1.6.0 + unifont: 0.7.4 + unist-util-visit: 5.1.0 + unstorage: 1.17.5 + vfile: 6.0.3 + vite: 7.3.3(@types/node@24.12.4) + vitefu: 1.1.3(vite@7.3.3(@types/node@24.12.4)) + xxhash-wasm: 1.1.0 + yargs-parser: 22.0.0 + zod: 4.4.3 + optionalDependencies: + sharp: 0.34.5 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - idb-keyval + - ioredis + - jiti + - less + - lightningcss + - rollup + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - uploadthing + - yaml + + asynckit@0.4.0: {} + + axobject-query@4.1.0: {} + + bail@2.0.2: {} + + bcp-47-match@2.0.3: {} + + bcp-47@2.1.0: + dependencies: + is-alphabetical: 2.0.1 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + + boolbase@1.0.0: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + ccount@2.0.1: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + ci-info@4.4.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clsx@2.1.1: {} + + collapse-white-space@2.1.0: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + comma-separated-tokens@2.0.3: {} + + commander@11.1.0: {} + + common-ancestor-path@2.0.0: {} + + cookie-es@1.2.3: {} + + cookie@1.1.1: {} + + crossws@0.3.5: + dependencies: + uncrypto: 0.1.3 + + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-selector-parser@3.3.0: {} + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.1 + + css-what@6.2.2: {} + + cssesc@3.0.0: {} + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + + defu@6.1.7: {} + + delayed-stream@1.0.0: {} + + dequal@2.0.3: {} + + destr@2.0.5: {} + + detect-libc@2.1.2: {} + + devalue@5.8.1: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + diff@8.0.4: {} + + direction@2.0.1: {} + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dset@3.1.4: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + duplexer@0.1.2: {} + + emoji-regex@8.0.0: {} + + entities@4.5.0: {} + + entities@6.0.1: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@2.1.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.3 + + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.16.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + + esbuild@0.27.7: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 + + escalade@3.2.0: {} + + escape-string-regexp@5.0.0: {} + + estree-util-attach-comments@3.0.0: + dependencies: + '@types/estree': 1.0.9 + + estree-util-build-jsx@3.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + + estree-util-is-identifier-name@3.0.0: {} + + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + + estree-util-to-js@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 + + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.9 + + event-stream@4.0.1: + dependencies: + duplexer: 0.1.2 + from: 0.1.7 + map-stream: 0.0.7 + pause-stream: 0.0.11 + split: 1.0.1 + stream-combiner: 0.2.2 + through: 2.3.8 + + eventemitter3@5.0.4: {} + + expressive-code@0.42.0: + dependencies: + '@expressive-code/core': 0.42.0 + '@expressive-code/plugin-frames': 0.42.0 + '@expressive-code/plugin-shiki': 0.42.0 + '@expressive-code/plugin-text-markers': 0.42.0 + + extend@3.0.2: {} + + fast-deep-equal@3.1.3: {} + + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + + fast-uri@3.1.2: {} + + fast-wrap-ansi@0.2.0: + dependencies: + fast-string-width: 3.0.2 + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + flattie@1.1.1: {} + + fontace@0.4.1: + dependencies: + fontkitten: 1.0.3 + + fontkitten@1.0.3: + dependencies: + tiny-inflate: 1.0.3 + + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.3 + mime-types: 2.1.35 + + from@0.1.7: {} + + 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.3 + math-intrinsics: 1.1.0 + + get-own-enumerable-property-symbols@3.0.2: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-tsconfig@5.0.0-beta.4: + dependencies: + resolve-pkg-maps: 1.0.0 + + github-slugger@2.0.0: {} + + gopd@1.2.0: {} + + h3@1.15.11: + dependencies: + cookie-es: 1.2.3 + crossws: 0.3.5 + defu: 6.1.7 + destr: 2.0.5 + iron-webcrypto: 1.2.1 + node-mock-http: 1.0.4 + radix3: 1.1.2 + ufo: 1.6.4 + uncrypto: 0.1.3 + + har-validator-compiled@1.0.0: {} + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.3: + dependencies: + function-bind: 1.1.2 + + hast-util-embedded@3.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-is-element: 3.0.0 + + hast-util-format@1.1.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-minify-whitespace: 1.0.1 + hast-util-phrasing: 3.0.1 + hast-util-whitespace: 3.0.0 + html-whitespace-sensitive-tag-names: 3.0.1 + unist-util-visit-parents: 6.0.2 + + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 + vfile: 6.0.3 + vfile-message: 4.0.3 + + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.1.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-has-property@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-is-body-ok-link@3.0.1: + dependencies: + '@types/hast': 3.0.4 + + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-minify-whitespace@1.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-is-element: 3.0.0 + hast-util-whitespace: 3.0.0 + unist-util-is: 6.0.1 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-phrasing@3.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-has-property: 3.0.0 + hast-util-is-body-ok-link: 3.0.1 + hast-util-is-element: 3.0.0 + + hast-util-raw@9.1.0: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.3.1 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.1 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-select@6.0.4: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + bcp-47-match: 2.0.3 + comma-separated-tokens: 2.0.3 + css-selector-parser: 3.3.0 + devlop: 1.1.0 + direction: 2.0.1 + hast-util-has-property: 3.0.0 + hast-util-to-string: 3.0.1 + hast-util-whitespace: 3.0.0 + nth-check: 2.1.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + hast-util-to-estree@3.1.3: + dependencies: + '@types/estree': 1.0.9 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + hast-util-to-parse5@8.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-string@3.0.1: + dependencies: + '@types/hast': 3.0.4 + + hast-util-to-text@4.0.2: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + + html-escaper@3.0.3: {} + + html-void-elements@3.0.0: {} + + html-whitespace-sensitive-tag-names@3.0.1: {} + + http-cache-semantics@4.2.0: {} + + httpsnippet@3.0.10: + dependencies: + chalk: 4.1.2 + event-stream: 4.0.1 + form-data: 4.0.4 + har-validator-compiled: 1.0.0 + stringify-object: 3.3.0 + yargs: 17.7.2 + + i18next@26.2.0: {} + + inline-style-parser@0.2.7: {} + + iron-webcrypto@1.2.1: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-decimal@2.0.1: {} + + is-docker@3.0.0: {} + + is-docker@4.0.0: {} + + is-fullwidth-code-point@3.0.0: {} + + is-hexadecimal@2.0.1: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-obj@1.0.1: {} + + is-plain-obj@4.1.0: {} + + is-regexp@1.0.0: {} + + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 + + js-tokens@4.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + json-schema-traverse@1.0.0: {} + + jsonc-parser@3.3.1: {} + + jsonpointer@5.0.1: {} + + klona@2.0.6: {} + + leven@3.1.0: {} + + longest-streak@3.1.0: {} + + lru-cache@11.4.0: {} + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + magicast@0.5.3: + dependencies: + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 + source-map-js: 1.2.1 + + map-stream@0.0.7: {} + + markdown-extensions@2.0.0: {} + + markdown-table@3.0.4: {} + + math-intrinsics@1.1.0: {} + + mdast-util-definitions@6.0.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + + mdast-util-directive@3.1.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-visit-parents: 6.0.2 + transitivePeerDependencies: + - supports-color + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.3: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.1 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.1.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + mdn-data@2.0.28: {} + + mdn-data@2.27.1: {} + + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-directive@4.0.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + parse-entities: 4.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.9 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-events-to-acorn@2.0.3: + dependencies: + '@types/estree': 1.0.9 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mrmime@2.0.1: {} + + ms@2.1.3: {} + + nanoid@3.3.12: {} + + neotraverse@0.6.18: {} + + nlcst-to-string@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + + node-fetch-native@1.6.7: {} + + node-mock-http@1.0.4: {} + + normalize-path@3.0.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + obug@2.1.1: {} + + ofetch@1.5.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.4 + + ohash@2.0.11: {} + + oniguruma-parser@0.12.2: {} + + oniguruma-to-es@4.3.6: + dependencies: + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 + + openapi-types@12.1.3: {} + + p-limit@7.3.0: + dependencies: + yocto-queue: 1.2.2 + + p-queue@9.3.0: + dependencies: + eventemitter3: 5.0.4 + p-timeout: 7.0.1 + + p-timeout@7.0.1: {} + + package-manager-detector@1.6.0: {} + + pagefind@1.5.2: + optionalDependencies: + '@pagefind/darwin-arm64': 1.5.2 + '@pagefind/darwin-x64': 1.5.2 + '@pagefind/freebsd-x64': 1.5.2 + '@pagefind/linux-arm64': 1.5.2 + '@pagefind/linux-x64': 1.5.2 + '@pagefind/windows-arm64': 1.5.2 + '@pagefind/windows-x64': 1.5.2 + + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.3.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + parse-latin@7.0.0: + dependencies: + '@types/nlcst': 2.0.3 + '@types/unist': 3.0.3 + nlcst-to-string: 4.0.0 + unist-util-modify-children: 4.0.0 + unist-util-visit-children: 3.0.0 + vfile: 6.0.3 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + pause-stream@0.0.11: + dependencies: + through: 2.3.8 + + piccolore@0.1.3: {} + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + picomatch@4.0.4: {} + + postcss-nested@6.2.0(postcss@8.5.14): + dependencies: + postcss: 8.5.14 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss@8.5.14: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prismjs@1.30.0: {} + + property-information@7.1.0: {} + + radix3@1.1.2: {} + + readdirp@5.0.0: {} + + recma-build-jsx@1.0.0: + dependencies: + '@types/estree': 1.0.9 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + + recma-jsx@1.0.1(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.9 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.9 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + + rehype-expressive-code@0.42.0: + dependencies: + expressive-code: 0.42.0 + + rehype-format@5.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-format: 1.1.0 + + rehype-parse@9.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-html: 2.0.3 + unified: 11.0.5 + + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-raw: 9.1.0 + vfile: 6.0.3 + + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.9 + '@types/hast': 3.0.4 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color + + rehype-stringify@10.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + unified: 11.0.5 + + rehype@13.0.2: + dependencies: + '@types/hast': 3.0.4 + rehype-parse: 9.0.1 + rehype-stringify: 10.0.1 + unified: 11.0.5 + + remark-directive@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-directive: 3.1.0 + micromark-extension-directive: 4.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-mdx@3.1.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.3 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + + remark-smartypants@3.0.2: + dependencies: + retext: 9.0.0 + retext-smartypants: 6.2.0 + unified: 11.0.5 + unist-util-visit: 5.1.0 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-pkg-maps@1.0.0: {} + + retext-latin@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + parse-latin: 7.0.0 + unified: 11.0.5 + + retext-smartypants@6.2.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unist-util-visit: 5.1.0 + + retext-stringify@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unified: 11.0.5 + + retext@9.0.0: + dependencies: + '@types/nlcst': 2.0.3 + retext-latin: 4.0.0 + retext-stringify: 4.0.0 + unified: 11.0.5 + + rollup@4.60.4: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.60.4 + '@rollup/rollup-android-arm64': 4.60.4 + '@rollup/rollup-darwin-arm64': 4.60.4 + '@rollup/rollup-darwin-x64': 4.60.4 + '@rollup/rollup-freebsd-arm64': 4.60.4 + '@rollup/rollup-freebsd-x64': 4.60.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.4 + '@rollup/rollup-linux-arm-musleabihf': 4.60.4 + '@rollup/rollup-linux-arm64-gnu': 4.60.4 + '@rollup/rollup-linux-arm64-musl': 4.60.4 + '@rollup/rollup-linux-loong64-gnu': 4.60.4 + '@rollup/rollup-linux-loong64-musl': 4.60.4 + '@rollup/rollup-linux-ppc64-gnu': 4.60.4 + '@rollup/rollup-linux-ppc64-musl': 4.60.4 + '@rollup/rollup-linux-riscv64-gnu': 4.60.4 + '@rollup/rollup-linux-riscv64-musl': 4.60.4 + '@rollup/rollup-linux-s390x-gnu': 4.60.4 + '@rollup/rollup-linux-x64-gnu': 4.60.4 + '@rollup/rollup-linux-x64-musl': 4.60.4 + '@rollup/rollup-openbsd-x64': 4.60.4 + '@rollup/rollup-openharmony-arm64': 4.60.4 + '@rollup/rollup-win32-arm64-msvc': 4.60.4 + '@rollup/rollup-win32-ia32-msvc': 4.60.4 + '@rollup/rollup-win32-x64-gnu': 4.60.4 + '@rollup/rollup-win32-x64-msvc': 4.60.4 + fsevents: 2.3.3 + + sax@1.6.0: {} + + semver@7.8.0: {} + + sharp@0.34.5: + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.0 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + + shiki@4.0.2: + dependencies: + '@shikijs/core': 4.0.2 + '@shikijs/engine-javascript': 4.0.2 + '@shikijs/engine-oniguruma': 4.0.2 + '@shikijs/langs': 4.0.2 + '@shikijs/themes': 4.0.2 + '@shikijs/types': 4.0.2 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + sisteransi@1.0.5: {} + + sitemap@9.0.1: + dependencies: + '@types/node': 24.12.4 + '@types/sax': 1.2.7 + arg: 5.0.2 + sax: 1.6.0 + + smol-toml@1.6.1: {} + + source-map-js@1.2.1: {} + + source-map@0.7.6: {} + + space-separated-tokens@2.0.2: {} + + split@1.0.1: + dependencies: + through: 2.3.8 + + starlight-openapi@0.25.2(@astrojs/markdown-remark@7.1.2)(@astrojs/starlight@0.39.2(astro@6.3.5(@types/node@24.12.4)(rollup@4.60.4)))(astro@6.3.5(@types/node@24.12.4)(rollup@4.60.4))(openapi-types@12.1.3): + dependencies: + '@astrojs/markdown-remark': 7.1.2 + '@astrojs/starlight': 0.39.2(astro@6.3.5(@types/node@24.12.4)(rollup@4.60.4)) + '@readme/openapi-parser': 4.1.2(openapi-types@12.1.3) + astro: 6.3.5(@types/node@24.12.4)(rollup@4.60.4) + github-slugger: 2.0.0 + httpsnippet: 3.0.10 + url-template: 3.1.1 + transitivePeerDependencies: + - openapi-types + + stream-combiner@0.2.2: + dependencies: + duplexer: 0.1.2 + through: 2.3.8 + + stream-replace-string@2.0.0: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + stringify-object@3.3.0: + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + style-to-js@1.1.21: + dependencies: + style-to-object: 1.0.14 + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + svgo@4.0.1: + dependencies: + commander: 11.1.0 + css-select: 5.2.2 + css-tree: 3.2.1 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + sax: 1.6.0 + + through@2.3.8: {} + + tiny-inflate@1.0.3: {} + + tinyclip@0.1.12: {} + + tinyexec@1.1.2: {} + + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + trim-lines@3.0.1: {} + + trough@2.2.0: {} + + tslib@2.8.1: + optional: true + + ufo@1.6.4: {} + + ultrahtml@1.6.0: {} + + uncrypto@0.1.3: {} + + undici-types@7.16.0: {} + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unifont@0.7.4: + dependencies: + css-tree: 3.2.1 + ofetch: 1.5.1 + ohash: 2.0.11 + + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-modify-children@4.0.0: + dependencies: + '@types/unist': 3.0.3 + array-iterate: 2.0.1 + + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.1.0 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-children@3.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + unstorage@1.17.5: + dependencies: + anymatch: 3.1.3 + chokidar: 5.0.0 + destr: 2.0.5 + h3: 1.15.11 + lru-cache: 11.4.0 + node-fetch-native: 1.6.7 + ofetch: 1.5.1 + ufo: 1.6.4 + + url-template@3.1.1: {} + + util-deprecate@1.0.2: {} + + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + vite@7.3.3(@types/node@24.12.4): + dependencies: + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.14 + rollup: 4.60.4 + tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 24.12.4 + fsevents: 2.3.3 + + vitefu@1.1.3(vite@7.3.3(@types/node@24.12.4)): + optionalDependencies: + vite: 7.3.3(@types/node@24.12.4) + + web-namespaces@2.0.1: {} + + which-pm-runs@1.1.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + xxhash-wasm@1.1.0: {} + + y18n@5.0.8: {} + + yargs-parser@21.1.1: {} + + yargs-parser@22.0.0: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + 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: 21.1.1 + + yocto-queue@1.2.2: {} + + zod@4.4.3: {} + + zwitch@2.0.4: {} diff --git a/docs/public/favicon.svg b/docs/public/favicon.svg new file mode 100644 index 0000000..d33bf4c --- /dev/null +++ b/docs/public/favicon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/src/assets/logo.svg b/docs/src/assets/logo.svg new file mode 100644 index 0000000..3677d77 --- /dev/null +++ b/docs/src/assets/logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/src/content.config.ts b/docs/src/content.config.ts new file mode 100644 index 0000000..d9ee8c9 --- /dev/null +++ b/docs/src/content.config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; +import { docsLoader } from '@astrojs/starlight/loaders'; +import { docsSchema } from '@astrojs/starlight/schema'; + +export const collections = { + docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }), +}; diff --git a/docs/src/content/docs/admin-guide/operations.mdx b/docs/src/content/docs/admin-guide/operations.mdx new file mode 100644 index 0000000..3f67cae --- /dev/null +++ b/docs/src/content/docs/admin-guide/operations.mdx @@ -0,0 +1,150 @@ +--- +title: Operations +description: Operational endpoints, jobs, classification banner, and live observability. +--- + +import { Aside } from '@astrojs/starlight/components' + +App Managers have access to a small set of operational endpoints rooted at +`/op/*`. These are reserved for the `admin` privilege plus a +`stig-manager:op` (or `:read` for read-only) scope. + +## Endpoint reference + +| Endpoint | Method | Purpose | +| --------------------- | ---------- | ------------------------------------------------------ | +| `/op/appinfo` | `GET` | Cluster + node telemetry, user/role counts, DB stats. | +| `/op/appdata` | `GET` | Export database to a single JSON document. | +| `/op/appdata` | `POST` | Import a JSON document into the database. | +| `/op/appdata/tables` | `GET` | List of importable tables and counts. | +| `/op/configuration` | `GET` | Effective configuration (secrets redacted). | +| `/op/definition` | `GET` | Returns the embedded OpenAPI 3.0.1 definition. | +| `/op/details` | `GET` | Single-call dashboard summary (used by the SPA home). | +| `/op/state` | `GET` | Current state — `available` / `starting` / `degraded`. | +| `/op/state/sse` | `GET (SSE)`| Push system state changes. | +| `/op/log` | `WS` | Live tail of structured logs. | +| `/op/audit` | `GET` | Read the global audit log. | + +## AppInfo + +`GET /op/appinfo` returns a single deeply-nested object summarising the +system. The exact schema is defined in `AppInfo` in the OpenAPI spec; the +highlights: + +- Build info (version, commit, build date). +- Postgres status — version, uptime, pool stats, table sizes. +- User counts by privilege and by role. +- Per-Collection summaries — grant counts, asset counts, STIG counts, + rule counts, settings, restricted-user counts. +- Per-request statistics (last hour, last 24 h). +- Operation-ID projections — how often each endpoint has been hit and at + what average / p95 latency. + +The SPA's Admin Dashboard renders the contents of this endpoint. + +## AppData export and import + +AppData is the canonical interchange format. A single `GET /op/appdata` +returns a self-describing JSON blob that can be re-applied via +`POST /op/appdata` to migrate or restore data. + +### Export + +```http +GET /op/appdata?elevate=true HTTP/1.1 +Authorization: Bearer +Accept: application/json +``` + +The response is streamed to keep memory usage bounded. + +### Import + +```http +POST /op/appdata HTTP/1.1 +Authorization: Bearer +Content-Type: application/json + +{...the previously-exported document...} +``` + +Useful query parameters: + +- `mode=dryRun` — validate and report changes without applying. +- `mode=replace` — replace all data (the default for AppData applies). +- `mode=merge` — merge by primary keys; skip rows that already exist. + + + +## State and SSE + +`/op/state` returns one of `starting`, `available`, `degraded` along with +a `reason` and the timestamp of the last transition. `/op/state/sse` +streams these transitions as they happen. + +The SPA subscribes to the SSE endpoint and renders a small status pill in +the top bar. When `degraded`, the pill turns yellow and links to the +reason. + +## Live logs + +`/op/log` is a WebSocket. After upgrading, the server sends one snapshot +message containing version, config (redacted), and a recent log slice, +then begins forwarding new log events as they happen. Each event is one +JSON object (see [Logging](/installation/logging) for the schema). + +The SPA's Admin → Live Logs page is a thin client over this endpoint with +filtering and pause/resume. + +## Audit log + +`/op/audit` returns the global audit log: every mutating operation, with +`who`, `when`, `target`, and `before` / `after` snapshots. Filters: + +- `from=` / `to=` — ISO timestamps. +- `actor=` — user or service account name. +- `target=` — `collection.id` / `asset.id` / `review.id` etc. +- `action=` — `create` / `update` / `delete` / `restore`. + +Per-Collection audit (a strict subset) is available to Collection Owners +at `/collections/{id}/audit`. + +## Jobs + +Jobs are the platform's persistent scheduler. They are accessible via +`/jobs/*` (any authenticated user can read their own jobs; +`stig-manager:op` is required to create system-scope jobs). + +- `Job` — a recurring or one-shot job definition. +- `Job Task` — one unit of work in a Job. +- `Job Run` — an execution of a Task; carries logs and a status. + +Built-in Tasks (see also the Tasks dropdown in the Admin UI): + +- `library.compileImport` +- `metrics.recompute` +- `audit.rollup` +- `appdata.export` +- `appdata.import` +- `collection.clone` +- `collection.export.cklBundle` +- `collection.export.poam` + +## Classification banner + +The `STIGMAN_CLASSIFICATION` env var sets the banner shown at the top of +every page. Allowed values: `NONE` (default), `U`, `CUI`, `S`, `TS`. +The banner is a visual aid — it does not enforce classification at the +data layer. + +## Reverse-proxy compatibility + +- Disable proxy buffering on `/op/state/sse` and `/op/log`. +- Allow `Authorization: Bearer` to pass through untouched. +- Increase `proxy_read_timeout` (or equivalent) to at least 5 minutes so + long-lived SSE/WS streams aren't dropped. + +See [Reverse Proxy](/installation/reverse-proxy) for example configs. diff --git a/docs/src/content/docs/admin-guide/quickstart.mdx b/docs/src/content/docs/admin-guide/quickstart.mdx new file mode 100644 index 0000000..9d1568b --- /dev/null +++ b/docs/src/content/docs/admin-guide/quickstart.mdx @@ -0,0 +1,108 @@ +--- +title: Admin Quick Start +description: Application Manager responsibilities — keeping STIGs current, managing users and grants, exporting and restoring AppData. +--- + +import { Aside, Steps } from '@astrojs/starlight/components' + +This walks through the routine duties of a STIG Manager **Application +Manager** (sometimes shortened to "admin" — that's the `admin` privilege +in your OIDC provider). You should already be comfortable with the +[user concepts and workflow](/user-guide/concepts) before working through +this page. + +Beyond what a regular User can do, an App Manager can: + +- Import and update STIG Benchmarks. +- Modify Collections to which they have no direct grant. +- Manage all Users, User Groups, and Grants. +- Export and restore Application Data. +- Configure and run Jobs. +- Read operational endpoints (`/op/*`). + + + +## Keeping the STIG Library current + + + +1. **Download the latest compilation** from + [public.cyber.mil/stigs](https://public.cyber.mil/stigs/) or + [cyber.mil/stigs](https://cyber.mil/stigs/). + +2. **Open Admin → STIG Benchmarks.** + +3. **Click *Import STIGs*** and select the `.zip` archive (a full + compilation or individual STIGs). The parser handles: + - Quarterly Library Compilations (zip of zips of XCCDF). + - SCAP data streams (`data-stream-collection`). + - Plain XCCDF Benchmarks. + +4. **Decide whether to replace existing revisions.** By default, if the + archive contains a revision already known to the system, it is kept as + is. Tick *Replace existing Revisions* to overwrite — useful when DISA + re-issues a revision under the same identifier. + +5. **Wait for the Job to complete.** Imports run as Jobs; you can navigate + away. Progress and per-rule warnings appear in the Job's log. + + + +When the import finishes, every Collection that had the previous Revision +attached automatically gains the new Revision. Reviews carry forward where +the Rule's `(version, checkContentSha256)` is unchanged — see +[Review Handling](/user-guide/review-handling). + +## Managing Users, Groups, and Grants + +- **Admin → Users** lists every User the system has seen (a User is + created on first login). You can view their grants, lastAccess, and + privileges from there. +- **Admin → User Groups** lets you create and edit groups, set + descriptions, and add/remove members. +- For per-Collection access, prefer to edit grants in + **Collection → Configuration → Grants**. The Admin Users view is for + troubleshooting and global cleanup. + +## Application Data + +The **Admin → App Data** page (and `/op/appdata`) lets you export the +entire database as a single JSON file and re-import it later. This is the +recommended interchange format between deployments — and how we migrate +from upstream NUWCDIVNPT installs. + + + +## Jobs + +The **Admin → Jobs** page surfaces every scheduled or ad-hoc job. Each +Job has Tasks, each Task has Runs. Logs and progress are live. + +Built-in tasks include: + +- Library Compilation import. +- Periodic metrics refresh (per-Collection CORA recompute). +- Periodic audit-log rollup. +- AppData export. + +## Operational endpoints + +`/op/*` endpoints are reserved for App Managers: + +- `/op/appinfo` — cluster + node telemetry. +- `/op/appdata` — export / import. +- `/op/state` and `/op/state/sse` — system state stream. +- `/op/log` — live structured logs (WebSocket). +- `/op/configuration` — effective configuration (secrets redacted). +- `/op/definition` — the embedded OpenAPI definition. + +See [Operations](/admin-guide/operations) for details. diff --git a/docs/src/content/docs/features/common-tasks.mdx b/docs/src/content/docs/features/common-tasks.mdx new file mode 100644 index 0000000..410fb07 --- /dev/null +++ b/docs/src/content/docs/features/common-tasks.mdx @@ -0,0 +1,46 @@ +--- +title: Common Tasks +description: At-a-glance pointers to common workflows and where to find them. +--- + +This page is a directory: each item links to the section that explains it in +depth. + +## I want to… + +### Set up the application + +- [Quick start with Docker](/installation/quickstart) — Postgres 18 + Keycloak + + API + SPA in one `docker compose up`. +- [Configure the database](/installation/database) — schema, user, migrations. +- [Configure authentication](/installation/authentication) — Keycloak, Okta, + Azure Entra ID. +- [List of environment variables](/installation/environment-variables). +- [Front it with a reverse proxy](/installation/reverse-proxy). +- [Harden the deployment](/installation/securing). + +### Evaluate STIGs + +- [User quick start](/user-guide/quickstart). +- [Concepts and the day-to-day workflow](/user-guide/concepts). +- [Roles and access](/user-guide/roles-and-access). +- [How reviews are matched when STIGs revise](/user-guide/review-handling). +- [Document a Rule exception](/user-guide/rule-exceptions). + +### Administer a Collection or deployment + +- [Admin quick start](/admin-guide/quickstart). +- [Operational endpoints, jobs, and app data](/admin-guide/operations). + +### Build an integration + +- [Read the API reference](/reference/api). +- [Authentication and scopes](/installation/authentication). + +### Understand the project itself + +- [Architecture](/project/architecture). +- [Contributing](/project/contributing). +- [Testing](/project/testing). +- [Related repositories](/project/related-repos). +- [License & Intent](/project/license). diff --git a/docs/src/content/docs/features/overview.mdx b/docs/src/content/docs/features/overview.mdx new file mode 100644 index 0000000..6fa7d89 --- /dev/null +++ b/docs/src/content/docs/features/overview.mdx @@ -0,0 +1,117 @@ +--- +title: Features Overview +description: Capabilities of STIG Manager — what it does, who it serves, and how it fits in. +--- + +import { Aside } from '@astrojs/starlight/components' + +## What is STIG Manager? + +STIG Manager is an Open Source API and Web client for managing the assessment +of Information Systems for compliance with [security +checklists](https://public.cyber.mil/stigs/) published by the United States +Defense Information Systems Agency (DISA). It supports DISA checklists +[distributed](https://public.cyber.mil/stigs/downloads/) as either a Security +Technical Implementation Guide (STIG) or a Security Requirements Guide (SRG) +in the XCCDF format. + +This re-implementation maintains feature parity with the original +[NUWCDIVNPT/stig-manager](https://github.com/NUWCDIVNPT/stig-manager) project +and **the same API surface** (`/api/v1`), so integrations and automation work +unchanged. + +## Single Source of Truth across RMF Steps 3 and 4 + +Throughout the RMF process, STIG Manager is the single source of truth for +users, evaluators, managers, RMF package reviewers, ISSEs, NQVs, and +automated tools — about Assets, STIGs, and their current assessment status. By +letting everyone refer to the same data and reports, the RMF process can be +executed efficiently and its progress monitored effectively. STIG Manager's +API lets automated tools submit scan results and access data describing what +STIGs they should be scanning. + +## Capabilities + +### STIG evaluation data, freed from `.ckl` files + +STIG Manager maintains a canonical set of STIGs as published by DISA and +relates **all** Reviews to that set. Working with the data directly, +rather than passing `.ckl` files around, eliminates several classes of +problem: evaluators using the wrong revision, accidental severity changes, +malformed `.ckl`s, and other issues that hamper the flow of Evaluations to +Validators. + +STIG Manager imports `.ckl` files and creates Reviews matching their +contents. Remaining gaps can be reviewed manually in the UI or filled by +additional imports. The unified view of Evaluation progress is not tied to a +specific `.ckl`. Properly-formed `.ckl`s are generated on demand from the +current Evaluation state, ready for import into eMASS. + +### Collections, Assets, STIGs, and Reviews + +The primary organisational unit is the **Collection**. A Collection can +mirror an RMF Package, a Security Assessment Plan, or anything more +convenient (a Lab, an OS family). A Collection contains: + +- **Assets** — anything you evaluate (server, container image, network + device). +- **STIGs** — the canonical DISA checklist revisions selected for this + Collection. +- **Reviews** — one per (Asset, Rule), tracking the evaluator's finding and + status. +- **Grants** — who can do what, on which Assets / STIGs, at which role. +- **Labels** — free-form, used for filtering and reporting. + +### Build Collections from your existing `.ckl` files + +Migration to STIG Manager is intentionally easy: existing artifacts populate +Collections. Assets, STIGs, and Reviews can come from `.ckl` files produced +by STIG Viewer, or XCCDF results produced by the SCC tool, as well as +manually from the Collection Configuration tab. Once a Collection is created, +Users can be granted access to see current results per STIG, per Asset, or +the whole Collection. + +### Workspaces for understanding evaluation data + +The client provides efficient workspaces for creating Collections, attaching +STIGs to Assets, and assigning specific Users to evaluate them. User tasking +is managed in real time via Collection roles with varying levels of access — +down to specific STIGs on specific Assets. + +Every User gets real-time reports and statistics about their progress and the +status of their Reviews, scoped to their level of access in each Collection. + +### Reviews carry forward across STIG revisions + +STIG Manager tracks Reviews by Rule Version and Check Content. When DISA +publishes a new STIG revision, all Reviews for Rules with unchanged content +are carried forward to the new revision. Evaluators focus only on Rules that +actually changed. + +See [Review Handling](/user-guide/review-handling) for the matching +algorithm. + +### CORA risk scoring + +Collection dashboards include **CORA** (Cyber Operational Risk Assessment) +metrics that summarise residual risk by category. Severity counts, open +findings, age-of-review, and completion percentages are all live. + +### Bulk operations + +The Collection Review workspace lets you evaluate the **same Rule across +every Asset** that has it attached, with colour-coded status and bulk +updates. Import and export entire Collections in one shot. + +### Collaborative workflow + +- Role-based access (Restricted / Full / Manage / Owner). +- Accept / Reject validation by reviewers. +- Configurable per-Collection review requirements. +- Rule Exceptions with documented justification. + +### API-first + +A complete REST API (OpenAPI 3.0.1) enables automated scanning tools and +custom workflows to interact with assessment data the same way the UI does. +The API is documented [here](/reference/api). diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx new file mode 100644 index 0000000..4c6438c --- /dev/null +++ b/docs/src/content/docs/index.mdx @@ -0,0 +1,104 @@ +--- +title: STIG Manager +description: >- + Open-source API and web client for managing STIG assessments. React 19 + + shadcn/ui frontend, Go backend, Postgres 18. +template: splash +hero: + tagline: >- + Track STIG assessment status across every asset, system, and collection — + with a modern React 19 client, a fast Go backend, and a clean Postgres 18 + data model. + image: + file: ../../assets/logo.svg + actions: + - text: Quick Start + link: /installation/quickstart + icon: right-arrow + variant: primary + - text: User Guide + link: /user-guide/quickstart + icon: open-book + - text: API Reference + link: /reference/api + icon: external +--- + +import { Card, CardGrid, LinkCard } from '@astrojs/starlight/components' + +## What is this? + +This project is a from-scratch implementation of the +[NUWCDIVNPT/stig-manager](https://github.com/NUWCDIVNPT/stig-manager) project, +modernised top-to-bottom: + +- A **React 19 single-page app** built with [Vite](https://vitejs.dev), + [shadcn/ui](https://ui.shadcn.com), and [TanStack + Router/Query/Table](https://tanstack.com). +- A **Go backend** built around the upstream OpenAPI v1 specification, so + existing automation, scanners, and SCAP integrations keep working unchanged. +- A **PostgreSQL 18** data store that replaces the upstream MySQL schema. +- The same OIDC / OAuth 2.0 (PKCE) authentication model used upstream — works + with Keycloak, Okta, and Azure Entra ID. + + + + Group Assets, STIGs, and Reviews into Collections aligned with your RMF + packages. Customisable Labels filter views. + + + Dashboards show completion %, findings by severity, age-of-review, and + **CORA** risk scoring. + + + Reviews are matched to new STIG revisions by Rule Version + Check Content + hash, so evaluators only re-do work that actually changed. + + + Evaluate the same Rule across many Assets at once; batch import / export + entire Collections. + + + Ingest XCCDF, CKL, and CKLB files; export CKL bundles, XCCDF results, and + POA&M xlsx (eMASS-compatible). + + + Complete REST API documented inline. Build your own clients or wire in + scanners. + + + +## Where to start + + + + + + +## RMF context + +STIG Manager primarily supports **RMF Steps 3 (Implement)** and **4 (Assess)** +by serving as the single source of truth for STIG assessment status. During +**Step 6 (Monitor)** it tracks review ages, maintains history, and identifies +what requires re-evaluation when STIGs update or systems change. + +The tool slots in next to eMASS-style RMF platforms, SCAP scanners, and other +security tools — it does not replace them. It specialises in STIG assessment +tracking and is happy to import results from scanning tools, export checklists +for package submission, and support automation via its API. diff --git a/docs/src/content/docs/installation/authentication.mdx b/docs/src/content/docs/installation/authentication.mdx new file mode 100644 index 0000000..de6e660 --- /dev/null +++ b/docs/src/content/docs/installation/authentication.mdx @@ -0,0 +1,145 @@ +--- +title: Authentication & Identity +description: OIDC / OAuth 2.0 (PKCE) JWT claims, scopes, and provider configuration. +--- + +import { Aside, Tabs, TabItem } from '@astrojs/starlight/components' + +The API requires an OAuth 2.0 JSON Web Token (JWT) that conforms to the +[OpenID Connect](https://openid.net/connect/) specification on every request. +The web client uses **Authorization Code Flow with PKCE**. For automation +clients we recommend the **Device Authorization Grant** flow. + +The system has been tested with **Keycloak**, **Okta**, and **Azure Entra +ID**. Any compliant OIDC provider should work as long as it can issue a token +matching the [JWT requirements](#jwt-requirements) below. + + + +## JWT requirements + +The JWT must provide the following claims. Several have configurable claim +locations (mirroring upstream) so you can adapt to your provider: + +| Field | Env var | Default | Type | +| ------------ | -------------------------------- | --------------------- | ------------------------------------- | +| Username | `STIGMAN_JWT_USERNAME_CLAIM` | `preferred_username` | string | +| Full name | `STIGMAN_JWT_NAME_CLAIM` | `name` | string (optional) | +| Email | `STIGMAN_JWT_EMAIL_CLAIM` | `email` | string (optional) | +| Privileges | `STIGMAN_JWT_PRIVILEGES_CLAIM` | `realm_access.roles` | array<string> or `null` | +| Scope | `STIGMAN_JWT_SCOPE_CLAIM` | `scope` | space-separated string (RFC 6749) | +| Assertion ID | `STIGMAN_JWT_ASSERTION_CLAIM` | `jti` | string | +| Service name | `STIGMAN_JWT_SERVICENAME_CLAIM` | `clientId` | string | +| Audience | `STIGMAN_JWT_AUD_VALUE` | (unset) | if set, `aud` must include this value | + +Some providers use different claim names — set the env vars accordingly: + +- **Okta / Entra ID**: scopes live at `scp` rather than `scope`. +- **ADFS / Entra ID**: assertion ID at `uti` rather than `jti`. + +## Scopes + +STIG Manager uses four scope families, each with a `:read` variant: + +| Scope | Allows | +| ------------------------------ | -------------------------------------------- | +| `stig-manager:collection` | Read+write within Collections (subject to per-Collection role grants). | +| `stig-manager:collection:read` | Read-only within Collections. | +| `stig-manager:stig` | Manage STIG Library (upload / delete revisions). | +| `stig-manager:stig:read` | Read the STIG Library. | +| `stig-manager:user` | Manage users, user-groups, and grants. | +| `stig-manager:user:read` | Read user / group / grant data. | +| `stig-manager:op` | Operational endpoints (`/op/*`). | +| `stig-manager:op:read` | Read-only operational endpoints. | + +Scopes are *necessary* but not *sufficient* — Collection-level access is +gated by **Grants** (Restricted / Full / Manage / Owner). See +[Roles & Access](/user-guide/roles-and-access). + +## Privileges + +The `privileges` claim is an array of strings interpreted by the API: + +- `admin` — implicit owner across all Collections; can read `/op/*`. +- `create_collection` — can create new Collections. + +Privileges are coarse. Day-to-day permissions come from per-Collection +grants, not from this claim. + +## Algorithm and key handling + +- Only asymmetric signatures are accepted: **RS256**, **RS384**, **RS512**, + **ES256**, **ES384**. +- `none` is rejected. +- Keys are fetched from the provider's `jwks_uri` and cached with `kid` + awareness. +- A short list of **known insecure `kid` values** is rejected outright (e.g. + the well-known Keycloak demo key shipped in some examples). + +## Provider configuration + + + + + +1. Create a realm (the docker-compose preset names it `stigman`). +2. Create a confidential client `stig-manager-api` for the API (optional, used + only if you turn on the Swagger UI authorize button). +3. Create a public client `stig-manager` for the SPA: + - Standard flow enabled, Direct access disabled. + - Redirect URIs: `https://your-host/` and `https://your-host/oauth/callback`. + - Web origins: `+`. + - Proof Key for Code Exchange: **S256**. +4. Create client scopes for each `stig-manager:*` scope and assign them as + *optional* scopes to the SPA client. +5. Set the username, name, email mappers as required. + + + + + +1. Create an OIDC SPA application. +2. Grant Types: Authorization Code + Refresh Token. PKCE required. +3. Configure custom scopes `stig-manager:collection`, `…:stig`, `…:user`, + `…:op` (and `:read` variants) under your authorization server. +4. Set `STIGMAN_JWT_SCOPE_CLAIM=scp`. +5. Set `STIGMAN_JWT_PRIVILEGES_CLAIM` to the path of your Okta groups claim + (e.g. `groups`). + + + + + +1. Register an SPA application. +2. Expose API → Add scopes `stig-manager:collection` etc. as separate API + permissions. +3. Configure manifest `accessTokenAcceptedVersion: 2`. +4. Set `STIGMAN_JWT_SCOPE_CLAIM=scp` and + `STIGMAN_JWT_ASSERTION_CLAIM=uti`. +5. Set `STIGMAN_JWT_AUD_VALUE` to your application's URI (`api://…`). + + + + + +## Common configuration variables + +| Variable | Purpose | +| --------------------------------- | ---------------------------------------------------- | +| `STIGMAN_OIDC_PROVIDER` | Issuer URL (used for both the SPA and JWT validation). | +| `STIGMAN_JWT_AUD_VALUE` | Optional required `aud` claim value. | +| `STIGMAN_CLIENT_ID` | OIDC client ID baked into the SPA bundle. | +| `STIGMAN_CLIENT_EXTRA_SCOPES` | Whitespace-separated list appended to PKCE request. | +| `STIGMAN_CLIENT_SCOPE_PREFIX` | Adds a prefix to the requested scope list. | +| `STIGMAN_CLIENT_RESPONSE_MODE` | `fragment` (default) or `query`. | +| `STIGMAN_CLIENT_REAUTH_ACTION` | `popup` (default), `redirect`, or `iframe`. | +| `STIGMAN_CLIENT_USER_TIMEOUT` | Seconds of inactivity before re-auth is required. | +| `STIGMAN_CLIENT_ADMIN_TIMEOUT` | Same but for `admin` users. | +| `STIGMAN_DEV_ALLOW_INSECURE_TOKENS` | **Development only.** Disables some validation. | + +See [Environment Variables](/installation/environment-variables) for the +complete list. diff --git a/docs/src/content/docs/installation/data-and-permissions.mdx b/docs/src/content/docs/installation/data-and-permissions.mdx new file mode 100644 index 0000000..aac9f8c --- /dev/null +++ b/docs/src/content/docs/installation/data-and-permissions.mdx @@ -0,0 +1,97 @@ +--- +title: Data & Permissions +description: How data visibility maps to scopes, privileges, grants, and roles. +--- + +import { Aside } from '@astrojs/starlight/components' + +Data visibility in STIG Manager is decided by three independent axes that +combine on every API call: + +1. **JWT scopes** — the categories of action the token *could* perform. +2. **Privileges** — coarse capabilities like `admin` or `create_collection`. +3. **Per-Collection grants** — the fine-grained role (Restricted, Full, + Manage, Owner) tying a User or User-Group to a Collection. + +A request must clear **all three**: a token that lacks the +`stig-manager:collection` scope cannot edit a Collection even if the user is +its Owner. A user who is `admin` but whose token only has +`stig-manager:user:read` cannot create users. + +## Privileges (coarse) + +| Privilege | Effect | +| -------------------- | ------------------------------------------------------- | +| `admin` | Implicit Owner on every Collection. Required for `/op/*` writes. | +| `create_collection` | Can create new Collections. Without it, a user can be granted to an existing Collection but cannot create one. | +| *(none)* | Subject entirely to per-Collection grants. | + +`admin` is intended for a small operations team. Day-to-day Collection +ownership should be expressed via grants, not by handing out `admin`. + +## Grants (fine-grained) + +A **grant** binds a subject (User or User-Group) to a Collection at one of +four roles: + +| Role | Numeric | Read | Update reviews | Manage Collection | Manage grants | +| ------------ | ------- | ---- | -------------- | ----------------- | ------------- | +| Restricted | 1 | ✓ (only assigned STIGs/Assets) | ✓ (only assigned) | — | — | +| Full | 2 | ✓ | ✓ | — | — | +| Manage | 3 | ✓ | ✓ | ✓ | — | +| Owner | 4 | ✓ | ✓ | ✓ | ✓ | + +**Restricted** grants can be further narrowed by ACL entries that pick +specific (Asset, STIG) pairs and/or specific Labels. + +## ACLs on Restricted grants + +A Restricted grant supports per-row ACL entries. Each entry can target: + +- A specific Asset. +- A specific STIG (benchmark). +- A specific (Asset, STIG) pair. +- A Label name (any Asset carrying the Label). + +ACLs are additive: a Restricted user sees the union of all matching rows. To +revoke, delete the ACL entry, not the grant itself. + +See [Roles & Access](/user-guide/roles-and-access) for the user-facing +explanation. + +## User Groups + +User-Groups are sets of users that can be granted en masse. A user inherits +the maximum role from all groups they belong to **plus** any direct grant. +ACLs from group membership are merged with direct ACLs. + +## How the API enforces this + +Every request flow is roughly: + +1. Validate the JWT (signature, exp, aud, scope, algorithm). +2. Resolve the caller into a `(userId, privileges[], scopes[])` triple. +3. For data-bearing requests, evaluate per-Collection role: + - Compute the *effective grant* as `max(directGrant, group grants, admin ⇒ Owner)`. + - Apply ACL constraints for Restricted callers. +4. For each row returned, redact attributes the caller's role cannot see + (e.g. comments on Reviews require Full+). + +## What's stored + +| Table | Notes | +| -------------------- | ------------------------------------------------------------- | +| `user_data` | Identity (username, displayName, email, lastAccess, prefs). | +| `user_group` | Group metadata. | +| `user_group_user_map`| Membership rows. | +| `collection_grant` | `(collection_id, subject, role)`. | +| `collection_grant_acl` | `(grant_id, asset_id?, benchmark_id?, label_id?, access)`. | + +All access decisions are logged to `audit_log` (admin-readable). + + diff --git a/docs/src/content/docs/installation/database.mdx b/docs/src/content/docs/installation/database.mdx new file mode 100644 index 0000000..586db3f --- /dev/null +++ b/docs/src/content/docs/installation/database.mdx @@ -0,0 +1,115 @@ +--- +title: Database — PostgreSQL 18 +description: Provisioning, configuration, and migration model for the STIG Manager Postgres database. +--- + +import { Aside, Steps, Code } from '@astrojs/starlight/components' + +STIG Manager uses **PostgreSQL 18** as its sole data store. The original +upstream project used MySQL 8.x; this re-implementation rebuilds the schema in +Postgres-native types. + + + +## Requirements + +- PostgreSQL **16+**; **18** recommended. +- A dedicated database (a Postgres _database_, not a schema-in-a-database in + the MySQL sense). +- A role with `ALL PRIVILEGES` on that database. Server-administration + privileges (`SUPERUSER`, `CREATEDB`) are **not** required at runtime, but + are needed for the initial `CREATE DATABASE` if you don't pre-provision. +- Extensions: the migration ensures `pgcrypto` and `pg_trgm` are present + (used for UUIDs and label search). Either pre-install them or grant the + role the right to create extensions on first boot. + +## Provisioning the database + + + +1. **Create the role and database.** + + ```sql + CREATE ROLE stigman LOGIN PASSWORD ''; + CREATE DATABASE stigman OWNER stigman; + ``` + +2. **Enable extensions** (run as a superuser once): + + ```sql + \c stigman + CREATE EXTENSION IF NOT EXISTS pgcrypto; + CREATE EXTENSION IF NOT EXISTS pg_trgm; + ``` + +3. **Point the API at it** via env vars: + + ```bash + STIGMAN_DB_HOST=db.example.invalid + STIGMAN_DB_PORT=5432 + STIGMAN_DB_NAME=stigman + STIGMAN_DB_USER=stigman + STIGMAN_DB_PASSWORD= + STIGMAN_DB_SSLMODE=verify-full + ``` + + First boot will apply the baseline migration and any forwards. + + + +## Connection security + +| Variable | Purpose | Default | +| --------------------------- | -------------------------------------------------------- | -------- | +| `STIGMAN_DB_SSLMODE` | `disable` / `require` / `verify-ca` / `verify-full` | `prefer` | +| `STIGMAN_DB_SSLROOTCERT` | Path to CA bundle for `verify-ca` / `verify-full` | unset | +| `STIGMAN_DB_SSLCERT` | Client cert (optional, mTLS to DB) | unset | +| `STIGMAN_DB_SSLKEY` | Client key (optional, mTLS to DB) | unset | +| `STIGMAN_DB_MAX_CONNECTIONS`| Max connections in the pool | `25` | +| `STIGMAN_DB_MAX_IDLE` | Max idle connections | `5` | +| `STIGMAN_DB_CONN_LIFETIME` | Max lifetime of a pooled connection | `30m` | + +Use `verify-full` in any environment where the database lives off-host. + +## Migration model + +Migrations are SQL files shipped with the API binary and run via +[goose](https://github.com/pressly/goose) at startup. They live in the source +tree under `api/migrations/`. + +- `0001_baseline.sql` — the synthesised end-state of upstream's 47 MySQL + migrations, translated to Postgres types. Idempotent against an empty DB. +- `1000_…` onwards — forward migrations introduced by this project. We start + at `1000_` deliberately to leave room. + +Type translations applied vs. upstream MySQL: + +| MySQL | Postgres | +| -------------------------------- | ------------------------- | +| `BIGINT UNSIGNED` | `bigint` | +| `TINYINT(1)` | `boolean` | +| `JSON` | `jsonb` | +| `DATETIME` | `timestamptz` | +| `MEDIUMTEXT` / `LONGTEXT` | `text` | +| `CHAR(36)` (UUID strings) | `uuid` | +| Generated columns on `JSON` | `GENERATED ALWAYS AS …` over `jsonb` | + +## Backups + +Use a standard Postgres backup tool (`pg_basebackup`, WAL-G, Barman, +pgBackRest). There is no application-level backup mode — the database is the +source of truth. Asset attachments, if any, are stored in the database as +`bytea` by default (configurable to an object store in a future release). + +## Restoring from upstream MySQL + +If you're migrating from an upstream NUWCDIVNPT STIG Manager deployment, see +the [data migration script in the project repo](https://github.com/Exonical/stig-manager-react/tree/main/tools/migrate-from-upstream) +*(planned for a later release)*. The upstream JSON dump produced by +`/op/appdata` is the recommended interchange format and is supported on import +by this implementation. diff --git a/docs/src/content/docs/installation/environment-variables.mdx b/docs/src/content/docs/installation/environment-variables.mdx new file mode 100644 index 0000000..a2f0d81 --- /dev/null +++ b/docs/src/content/docs/installation/environment-variables.mdx @@ -0,0 +1,133 @@ +--- +title: Environment Variables +description: Complete environment-variable reference for the STIG Manager API binary. +--- + +import { Aside } from '@astrojs/starlight/components' + +The Go API is configured exclusively through environment variables. This page +is the source of truth. Variable names are preserved from upstream wherever +the semantics match; database variables are renamed (with the upstream names +honoured as fallbacks for compatibility). + + + +## Server + +| Variable | Default | Description | +| ------------------------- | -------------- | ---------------------------------------------------- | +| `STIGMAN_API_ADDRESS` | `0.0.0.0` | Bind address for the HTTP server. | +| `STIGMAN_API_PORT` | `54000` | Listen port. | +| `STIGMAN_API_MAX_JSON_BODY` | `31457280` (30 MiB) | Max body size for `application/json` requests. | +| `STIGMAN_API_MAX_UPLOAD` | `1073741824` (1 GiB) | Max upload size for `multipart/form-data`. | +| `STIGMAN_API_TLS_CERT_FILE` | unset | Path to TLS cert. If set with key, HTTPS is served. | +| `STIGMAN_API_TLS_KEY_FILE` | unset | Path to TLS key. | +| `STIGMAN_API_TLS_KEY_PASSPHRASE` | unset | Optional passphrase for the key. | +| `STIGMAN_CLASSIFICATION` | `NONE` | Banner classification (`NONE`, `U`, `CUI`, `S`, `TS`). | +| `STIGMAN_REQUEST_TIMEOUT` | `60s` | Per-request timeout for non-stream endpoints. | + +## Database (Postgres) + +| Variable | Default | Description | +| ------------------------------ | ------------ | ---------------------------------------------------- | +| `STIGMAN_DB_HOST` | `localhost` | Postgres host. | +| `STIGMAN_DB_PORT` | `5432` | Postgres port. | +| `STIGMAN_DB_NAME` | `stigman` | Database name. Fallback: `STIGMAN_DB_SCHEMA`. | +| `STIGMAN_DB_USER` | `stigman` | Role used to connect. | +| `STIGMAN_DB_PASSWORD` | unset | Required unless using `peer` auth on a local socket. | +| `STIGMAN_DB_SSLMODE` | `prefer` | `disable` / `require` / `verify-ca` / `verify-full`. | +| `STIGMAN_DB_SSLROOTCERT` | unset | CA bundle for `verify-*`. | +| `STIGMAN_DB_SSLCERT` | unset | Client cert (mTLS to DB). | +| `STIGMAN_DB_SSLKEY` | unset | Client key. | +| `STIGMAN_DB_MAX_CONNECTIONS` | `25` | Pool size. | +| `STIGMAN_DB_MAX_IDLE` | `5` | Idle pool size. | +| `STIGMAN_DB_CONN_LIFETIME` | `30m` | Max age of a pooled connection. | +| `STIGMAN_DB_REVERT` | `false` | If `true`, revert the most recent migration on boot. | + +## OIDC / JWT + +| Variable | Default | Description | +| --------------------------------- | ------------------------------------------------- | ----------- | +| `STIGMAN_OIDC_PROVIDER` | `http://localhost:8080/realms/stigman` | Issuer URL. | +| `STIGMAN_API_AUTHORITY` | (falls back to `OIDC_PROVIDER`) | Override issuer just for API token validation. | +| `STIGMAN_JWT_AUD_VALUE` | unset | If set, the `aud` claim must include this value. | +| `STIGMAN_JWT_USERNAME_CLAIM` | `preferred_username` | | +| `STIGMAN_JWT_NAME_CLAIM` | `name` | | +| `STIGMAN_JWT_EMAIL_CLAIM` | `email` | | +| `STIGMAN_JWT_PRIVILEGES_CLAIM` | `realm_access.roles` | | +| `STIGMAN_JWT_SCOPE_CLAIM` | `scope` | Use `scp` for Okta / Entra ID. | +| `STIGMAN_JWT_ASSERTION_CLAIM` | `jti` | Use `uti` for some Microsoft providers. | +| `STIGMAN_JWT_SERVICENAME_CLAIM` | `clientId` | Used for service-account clients. | +| `STIGMAN_JWT_ALLOWED_ALGS` | `RS256,RS384,RS512,ES256,ES384` | Comma-separated allowlist. | +| `STIGMAN_DEV_ALLOW_INSECURE_TOKENS` | `false` | Development only. | + +## SPA-served configuration + +These are baked into the SPA HTML on each request as a `