diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..1ec2f2a --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +DOKPLOY_URL="" +DOKPLOY_API_KEY="" diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 9b1c8b1..0000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -/dist diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index b315bce..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": [ "prettier"] -} diff --git a/.github/workflows/onPushToMain.yml b/.github/workflows/onPushToMain.yml index de7dda1..d350f43 100644 --- a/.github/workflows/onPushToMain.yml +++ b/.github/workflows/onPushToMain.yml @@ -1,56 +1,62 @@ -# test -name: version, tag and github release +name: release and publish on: push: branches: [main] +env: + COREPACK_ENABLE_STRICT: 0 + jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + with: + token: ${{ secrets.GH_TOKEN }} + + - uses: pnpm/action-setup@v6 + with: + version: latest + - uses: actions/setup-node@v4 + with: + node-version: latest + cache: pnpm + registry-url: https://registry.npmjs.org + + - run: pnpm install --ignore-scripts + - run: pnpm run build + - name: Check if version already exists id: version-check run: | package_version=$(node -p "require('./package.json').version") exists=$(gh api repos/${{ github.repository }}/releases/tags/v$package_version >/dev/null 2>&1 && echo "true" || echo "") - if [ -n "$exists" ]; - then + if [ -n "$exists" ]; then echo "Version v$package_version already exists" - echo "::warning file=package.json,line=1::Version v$package_version already exists - no release will be created. If you want to create a new release, please update the version in package.json and push again." echo "skipped=true" >> $GITHUB_OUTPUT else - echo "Version v$package_version does not exist. Creating release..." + echo "Version v$package_version does not exist" echo "skipped=false" >> $GITHUB_OUTPUT echo "tag=v$package_version" >> $GITHUB_OUTPUT fi env: GH_TOKEN: ${{ secrets.GH_TOKEN }} - - name: Setup git - if: ${{ steps.version-check.outputs.skipped == 'false' }} - run: | - git config --global user.email ${{ secrets.GH_EMAIL }} - git config --global user.name ${{ secrets.GH_USERNAME }} - - name: Generate oclif README - if: ${{ steps.version-check.outputs.skipped == 'false' }} - id: oclif-readme - run: | - pnpm install - pnpm exec oclif readme - if [ -n "$(git status --porcelain)" ]; then - git add . - git commit -am "chore: update README.md" - git push -u origin ${{ github.ref_name }} - fi + - name: Create Github Release + if: steps.version-check.outputs.skipped == 'false' uses: ncipollo/release-action@2c591bcc8ecdcd2db72b97d6147f871fcd833ba5 - if: ${{ steps.version-check.outputs.skipped == 'false' }} with: name: ${{ steps.version-check.outputs.tag }} tag: ${{ steps.version-check.outputs.tag }} commit: ${{ github.ref_name }} token: ${{ secrets.GH_TOKEN }} skipIfReleaseExists: true + + - name: Publish to npm + if: steps.version-check.outputs.skipped == 'false' + run: pnpm publish --no-git-checks + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/onRelease.yml b/.github/workflows/onRelease.yml deleted file mode 100644 index ff94d00..0000000 --- a/.github/workflows/onRelease.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: publish - -on: - release: - types: [released] - -jobs: - publish: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: latest - - run: pnpm install - - uses: JS-DevTools/npm-publish@19c28f1ef146469e409470805ea4279d47c3d35c - with: - token: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c73d38d..f7f271b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,22 +1,30 @@ name: tests + on: push: branches-ignore: [main] workflow_dispatch: +env: + COREPACK_ENABLE_STRICT: 0 + jobs: - unit-tests: + test: strategy: matrix: - os: ['ubuntu-latest', 'windows-latest'] - node_version: [lts/-1, lts/*, latest] + os: [ubuntu-latest, windows-latest] + node_version: [lts/*, latest] fail-fast: false runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v6 + with: + version: latest - uses: actions/setup-node@v4 with: node-version: ${{ matrix.node_version }} cache: pnpm - - run: pnpm install + - run: pnpm install --ignore-scripts - run: pnpm run build + - run: pnpm run test diff --git a/.gitignore b/.gitignore index 57a8bbf..3d9fde0 100644 --- a/.gitignore +++ b/.gitignore @@ -11,5 +11,4 @@ oclif.manifest.json yarn.lock package-lock.json - - +.env diff --git a/.mocharc.json b/.mocharc.json deleted file mode 100644 index fa25f20..0000000 --- a/.mocharc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "require": [ - "ts-node/register" - ], - "watch-extensions": [ - "ts" - ], - "recursive": true, - "reporter": "spec", - "timeout": 60000, - "node-option": [ - "loader=ts-node/esm", - "experimental-specifier-resolution=node" - ] -} diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..38e4d30 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +ignore-build-scripts=false diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index 6314335..0000000 --- a/.prettierrc.json +++ /dev/null @@ -1 +0,0 @@ -"@oclif/prettier-config" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index da748c7..3836e4c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,113 +1,63 @@ - - # Contributing -Hey, thanks for your interest in contributing to Dokploy CLI! We appreciate your help and taking your time to contribute. - - -Before you start, please first discuss the feature/bug you want to add with the owners and comunity via github issues. - -We have a few guidelines to follow when contributing to this project: - -- [Commit Convention](#commit-convention) -- [Setup](#setup) -- [Development](#development) -- [Build](#build) -- [Pull Request](#pull-request) - -## Commit Convention - -Before you craete a Pull Request, please make sure your commit message follows the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification. - -### Commit Message Format -``` -[optional scope]: - -[optional body] - -[optional footer(s)] -``` - -#### Type -Must be one of the following: - -* **feat**: A new feature -* **fix**: A bug fix -* **docs**: Documentation only changes -* **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc) -* **refactor**: A code change that neither fixes a bug nor adds a feature -* **perf**: A code change that improves performance -* **test**: Adding missing tests or correcting existing tests -* **build**: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm) -* **ci**: Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs) -* **chore**: Other changes that don't modify `src` or `test` files -* **revert**: Reverts a previous commit - -Example: -``` -feat: add new feature -``` - - +Thanks for your interest in contributing to Dokploy CLI! +Before you start, please discuss the feature/bug via [GitHub issues](https://github.com/Dokploy/cli/issues). ## Setup -Before you start, please make the clone based on the `main` branch. - ```bash git clone https://github.com/Dokploy/cli.git cd cli pnpm install ``` -## Development +Create a `.env` file with your credentials: -First step is to authenticate, you can connect to a dokploy localhost or a remote dokploy server. +```env +DOKPLOY_URL="https://your-server.dokploy.com" +DOKPLOY_API_KEY="YOUR_API_KEY" +``` -Authenticate +## Development ```bash -./bin/dev.js authenticate -``` +# Run in dev mode +pnpm run dev -- project all -Let's take the example to create a new command for application called `start`. +# Regenerate commands from OpenAPI spec +pnpm run generate -You can use the generators from OCLIF to create a new command. +# Build +pnpm run build -```bash -oclif generate command application:start +# Lint & format +pnpm run lint ``` -To run the command, you can use the following command: +### Updating commands -```bash -./bin/dev.js application:start or ./bin/dev.js start -``` +Commands in `src/generated/commands.ts` are auto-generated from `openapi.json`. Never edit that file manually. To update: -## Build +1. Replace `openapi.json` with the latest spec from the [Dokploy repo](https://github.com/Dokploy/dokploy) +2. Run `pnpm run generate` -```bash -pnpm run build -``` +## Commit convention -## Publish +Follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/): -```bash -pnpm run publish +``` +feat: add new feature +fix: resolve bug +docs: update readme +chore: bump version ``` +## Pull requests -## Pull Request - -- The `main` branch is the source of truth and should always reflect the latest stable release. -- Create a new branch for each feature or bug fix. -- Make sure to add tests for your changes. -- Make sure to update the documentation for any changes Go to the [docs.dokploy.com](https://docs.dokploy.com) website to see the changes. -- When creating a pull request, please provide a clear and concise description of the changes made. -- If you include a video or screenshot, would be awesome so we can see the changes in action. -- If your pull request fixes an open issue, please reference the issue in the pull request description. -- Once your pull request is merged, you will be automatically added as a contributor to the project. +- Branch from `main` +- Provide a clear description of your changes +- Reference any related issues +- Include a screenshot/video if applicable Thank you for your contribution! - diff --git a/LICENSE.md b/LICENSE.md index 4ee1c44..dc0af34 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 Mauricio Siu +Copyright (c) 2026 Dokploy Technologies, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/bin/dev.cmd b/bin/dev.cmd deleted file mode 100644 index cec553b..0000000 --- a/bin/dev.cmd +++ /dev/null @@ -1,3 +0,0 @@ -@echo off - -node --loader ts-node/esm --no-warnings=ExperimentalWarning "%~dp0\dev" %* diff --git a/bin/dev.js b/bin/dev.js deleted file mode 100755 index f9166e5..0000000 --- a/bin/dev.js +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env -S node --loader ts-node/esm --no-warnings=ExperimentalWarning - -// eslint-disable-next-line n/shebang -import {execute} from '@oclif/core' - -await execute({development: true, dir: import.meta.url}) diff --git a/bin/run.cmd b/bin/run.cmd deleted file mode 100644 index 968fc30..0000000 --- a/bin/run.cmd +++ /dev/null @@ -1,3 +0,0 @@ -@echo off - -node "%~dp0\run" %* diff --git a/bin/run.js b/bin/run.js index dd50271..c74d2a0 100755 --- a/bin/run.js +++ b/bin/run.js @@ -1,5 +1,3 @@ #!/usr/bin/env node -import {execute} from '@oclif/core' - -await execute({dir: import.meta.url}) +import "../dist/index.js"; diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..72c364d --- /dev/null +++ b/biome.json @@ -0,0 +1,42 @@ +{ + "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "ignoreUnknown": true, + "includes": ["**", "!**/dist", "!node_modules/**", "!src/generated/**"], + "maxSize": 2097152 + }, + "assist": { "actions": { "source": { "organizeImports": "on" } } }, + "linter": { + "rules": { + "complexity": { + "noUselessCatch": "off" + }, + "correctness": { + "noUnusedImports": "error", + "noUnusedFunctionParameters": "error", + "noUnusedVariables": "off" + }, + "style": { + "noNonNullAssertion": "off", + "noParameterAssign": "error", + "useAsConstAssertion": "error", + "useDefaultParameterLast": "error", + "useSelfClosingElements": "error", + "useSingleVarDeclarator": "error", + "noUnusedTemplateLiteral": "error", + "useNumberNamespace": "error", + "noInferrableTypes": "error", + "noUselessElse": "error" + }, + "suspicious": { + "noExplicitAny": "off", + "noRedeclare": "off" + } + } + } +} diff --git a/openapi.json b/openapi.json new file mode 100644 index 0000000..bab2a33 --- /dev/null +++ b/openapi.json @@ -0,0 +1,48976 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Dokploy API", + "description": "Complete API documentation for Dokploy - Deploy applications, manage databases, and orchestrate your infrastructure. This API allows you to programmatically manage all aspects of your Dokploy instance.", + "version": "1.0.0", + "contact": { + "name": "Dokploy Team", + "url": "https://dokploy.com" + }, + "license": { + "name": "Apache 2.0", + "url": "https://github.com/dokploy/dokploy/blob/canary/LICENSE" + } + }, + "servers": [ + { + "url": "https://your-dokploy-instance.com/api" + } + ], + "tags": [ + { + "name": "admin" + }, + { + "name": "docker" + }, + { + "name": "compose" + }, + { + "name": "registry" + }, + { + "name": "cluster" + }, + { + "name": "user" + }, + { + "name": "domain" + }, + { + "name": "destination" + }, + { + "name": "backup" + }, + { + "name": "deployment" + }, + { + "name": "mounts" + }, + { + "name": "certificates" + }, + { + "name": "settings" + }, + { + "name": "security" + }, + { + "name": "redirects" + }, + { + "name": "port" + }, + { + "name": "project" + }, + { + "name": "application" + }, + { + "name": "mysql" + }, + { + "name": "postgres" + }, + { + "name": "redis" + }, + { + "name": "mongo" + }, + { + "name": "mariadb" + }, + { + "name": "sshRouter" + }, + { + "name": "gitProvider" + }, + { + "name": "bitbucket" + }, + { + "name": "github" + }, + { + "name": "gitlab" + }, + { + "name": "gitea" + }, + { + "name": "server" + }, + { + "name": "swarm" + }, + { + "name": "ai" + }, + { + "name": "organization" + }, + { + "name": "schedule" + }, + { + "name": "rollback" + }, + { + "name": "volumeBackups" + }, + { + "name": "environment" + } + ], + "externalDocs": { + "description": "Full documentation", + "url": "https://docs.dokploy.com" + }, + "paths": { + "/admin.setupMonitoring": { + "post": { + "operationId": "admin-setupMonitoring", + "tags": [ + "admin" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "metricsConfig": { + "type": "object", + "properties": { + "server": { + "type": "object", + "properties": { + "refreshRate": { + "type": "number" + }, + "port": { + "type": "number" + }, + "token": { + "type": "string" + }, + "urlCallback": { + "type": "string" + }, + "retentionDays": { + "type": "number" + }, + "cronJob": { + "type": "string" + }, + "thresholds": { + "type": "object", + "properties": { + "cpu": { + "type": "number" + }, + "memory": { + "type": "number" + } + }, + "required": [ + "cpu", + "memory" + ] + } + }, + "required": [ + "refreshRate", + "port", + "token", + "urlCallback", + "retentionDays", + "cronJob", + "thresholds" + ] + }, + "containers": { + "type": "object", + "properties": { + "refreshRate": { + "type": "number" + }, + "services": { + "type": "object", + "properties": { + "include": { + "type": "array", + "items": { + "type": "string" + } + }, + "exclude": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "required": [ + "refreshRate", + "services" + ] + } + }, + "required": [ + "server", + "containers" + ] + } + }, + "required": [ + "metricsConfig" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/docker.getContainers": { + "get": { + "operationId": "docker-getContainers", + "tags": [ + "docker" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/docker.restartContainer": { + "post": { + "operationId": "docker-restartContainer", + "tags": [ + "docker" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "containerId": { + "type": "string" + } + }, + "required": [ + "containerId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/docker.getConfig": { + "get": { + "operationId": "docker-getConfig", + "tags": [ + "docker" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "containerId", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/docker.getContainersByAppNameMatch": { + "get": { + "operationId": "docker-getContainersByAppNameMatch", + "tags": [ + "docker" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "appType", + "schema": { + "type": "string", + "enum": [ + "stack", + "docker-compose" + ] + } + }, + { + "in": "query", + "name": "appName", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/docker.getContainersByAppLabel": { + "get": { + "operationId": "docker-getContainersByAppLabel", + "tags": [ + "docker" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "appName", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "type", + "schema": { + "type": "string", + "enum": [ + "standalone", + "swarm" + ] + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/docker.getStackContainersByAppName": { + "get": { + "operationId": "docker-getStackContainersByAppName", + "tags": [ + "docker" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "appName", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/docker.getServiceContainersByAppName": { + "get": { + "operationId": "docker-getServiceContainersByAppName", + "tags": [ + "docker" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "appName", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/project.create": { + "post": { + "operationId": "project-create", + "tags": [ + "project" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "env": { + "type": "string" + } + }, + "required": [ + "name" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/project.one": { + "get": { + "operationId": "project-one", + "tags": [ + "project" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "projectId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/project.all": { + "get": { + "operationId": "project-all", + "tags": [ + "project" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/project.allForPermissions": { + "get": { + "operationId": "project-allForPermissions", + "tags": [ + "project" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/project.search": { + "get": { + "operationId": "project-search", + "tags": [ + "project" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "name", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "description", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "limit", + "schema": { + "default": 20, + "type": "number" + } + }, + { + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/project.remove": { + "post": { + "operationId": "project-remove", + "tags": [ + "project" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "projectId": { + "type": "string" + } + }, + "required": [ + "projectId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/project.update": { + "post": { + "operationId": "project-update", + "tags": [ + "project" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "projectId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "createdAt": { + "type": "string" + }, + "organizationId": { + "type": "string" + }, + "env": { + "type": "string" + } + }, + "required": [ + "projectId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/project.duplicate": { + "post": { + "operationId": "project-duplicate", + "tags": [ + "project" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sourceEnvironmentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "includeServices": { + "default": true, + "type": "boolean" + }, + "selectedServices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "application", + "postgres", + "mariadb", + "mongo", + "mysql", + "redis", + "compose" + ] + } + }, + "required": [ + "id", + "type" + ] + } + }, + "duplicateInSameProject": { + "default": false, + "type": "boolean" + } + }, + "required": [ + "sourceEnvironmentId", + "name" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.create": { + "post": { + "operationId": "application-create", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "environmentId": { + "type": "string" + }, + "serverId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "environmentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.one": { + "get": { + "operationId": "application-one", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "applicationId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.reload": { + "post": { + "operationId": "application-reload", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appName": { + "type": "string" + }, + "applicationId": { + "type": "string" + } + }, + "required": [ + "appName", + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.delete": { + "post": { + "operationId": "application-delete", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.stop": { + "post": { + "operationId": "application-stop", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.start": { + "post": { + "operationId": "application-start", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.redeploy": { + "post": { + "operationId": "application-redeploy", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": [ + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.saveEnvironment": { + "post": { + "operationId": "application-saveEnvironment", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "env": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "buildArgs": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "buildSecrets": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "createEnvFile": { + "type": "boolean" + } + }, + "required": [ + "applicationId", + "env", + "buildArgs", + "buildSecrets", + "createEnvFile" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.saveBuildType": { + "post": { + "operationId": "application-saveBuildType", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "buildType": { + "type": "string", + "enum": [ + "dockerfile", + "heroku_buildpacks", + "paketo_buildpacks", + "nixpacks", + "static", + "railpack" + ] + }, + "dockerfile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "dockerContextPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "dockerBuildStage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "herokuVersion": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "railpackVersion": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "publishDirectory": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "isStaticSpa": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "applicationId", + "buildType", + "dockerfile", + "dockerContextPath", + "dockerBuildStage", + "herokuVersion", + "railpackVersion" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.saveGithubProvider": { + "post": { + "operationId": "application-saveGithubProvider", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "repository": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "branch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "owner": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "buildPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "githubId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "triggerType": { + "default": "push", + "type": "string", + "enum": [ + "push", + "tag" + ] + }, + "enableSubmodules": { + "type": "boolean" + }, + "watchPaths": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "applicationId", + "repository", + "branch", + "owner", + "buildPath", + "githubId", + "triggerType" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.saveGitlabProvider": { + "post": { + "operationId": "application-saveGitlabProvider", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "gitlabBranch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "gitlabBuildPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "gitlabOwner": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "gitlabRepository": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "gitlabId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "gitlabProjectId": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "gitlabPathNamespace": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "enableSubmodules": { + "type": "boolean" + }, + "watchPaths": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "applicationId", + "gitlabBranch", + "gitlabBuildPath", + "gitlabOwner", + "gitlabRepository", + "gitlabId", + "gitlabProjectId", + "gitlabPathNamespace" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.saveBitbucketProvider": { + "post": { + "operationId": "application-saveBitbucketProvider", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "bitbucketBranch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketBuildPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketOwner": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketRepository": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketRepositorySlug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "applicationId": { + "type": "string" + }, + "enableSubmodules": { + "type": "boolean" + }, + "watchPaths": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "bitbucketBranch", + "bitbucketBuildPath", + "bitbucketOwner", + "bitbucketRepository", + "bitbucketRepositorySlug", + "bitbucketId", + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.saveGiteaProvider": { + "post": { + "operationId": "application-saveGiteaProvider", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "giteaBranch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "giteaBuildPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "giteaOwner": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "giteaRepository": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "giteaId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "enableSubmodules": { + "type": "boolean" + }, + "watchPaths": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "applicationId", + "giteaBranch", + "giteaBuildPath", + "giteaOwner", + "giteaRepository", + "giteaId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.saveDockerProvider": { + "post": { + "operationId": "application-saveDockerProvider", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "dockerImage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "applicationId": { + "type": "string" + }, + "username": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "password": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "registryUrl": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "dockerImage", + "applicationId", + "username", + "password", + "registryUrl" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.saveGitProvider": { + "post": { + "operationId": "application-saveGitProvider", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "customGitBranch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "applicationId": { + "type": "string" + }, + "customGitBuildPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "customGitUrl": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "watchPaths": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "enableSubmodules": { + "type": "boolean" + }, + "customGitSSHKeyId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "customGitBranch", + "applicationId", + "customGitBuildPath", + "customGitUrl", + "watchPaths" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.disconnectGitProvider": { + "post": { + "operationId": "application-disconnectGitProvider", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.markRunning": { + "post": { + "operationId": "application-markRunning", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.update": { + "post": { + "operationId": "application-update", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "env": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "previewEnv": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "watchPaths": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "previewBuildArgs": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "previewBuildSecrets": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "previewLabels": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "previewWildcard": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "previewPort": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "previewHttps": { + "type": "boolean" + }, + "previewPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "previewCertificateType": { + "type": "string", + "enum": [ + "letsencrypt", + "none", + "custom" + ] + }, + "previewCustomCertResolver": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "previewLimit": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "isPreviewDeploymentsActive": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "previewRequireCollaboratorPermissions": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "rollbackActive": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "buildArgs": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "buildSecrets": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "memoryReservation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "memoryLimit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cpuReservation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cpuLimit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "subtitle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "args": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "refreshToken": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sourceType": { + "type": "string", + "enum": [ + "github", + "docker", + "git", + "gitlab", + "bitbucket", + "gitea", + "drop" + ] + }, + "cleanCache": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "repository": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "owner": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "branch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "buildPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "triggerType": { + "anyOf": [ + { + "type": "string", + "enum": [ + "push", + "tag" + ] + }, + { + "type": "null" + } + ] + }, + "autoDeploy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "gitlabProjectId": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "gitlabRepository": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "gitlabOwner": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "gitlabBranch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "gitlabBuildPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "gitlabPathNamespace": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "giteaRepository": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "giteaOwner": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "giteaBranch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "giteaBuildPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketRepository": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketRepositorySlug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketOwner": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketBranch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketBuildPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "username": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "password": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "dockerImage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "registryUrl": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "customGitUrl": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "customGitBranch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "customGitBuildPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "customGitSSHKeyId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "enableSubmodules": { + "type": "boolean" + }, + "dockerfile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "dockerContextPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "dockerBuildStage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "dropBuildPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "healthCheckSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Test": { + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "number" + }, + "Timeout": { + "type": "number" + }, + "StartPeriod": { + "type": "number" + }, + "Retries": { + "type": "number" + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "restartPolicySwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Condition": { + "type": "string" + }, + "Delay": { + "type": "number" + }, + "MaxAttempts": { + "type": "number" + }, + "Window": { + "type": "number" + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "placementSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string" + } + }, + "required": [ + "SpreadDescriptor" + ] + } + }, + "required": [ + "Spread" + ], + "additionalProperties": false + } + }, + "MaxReplicas": { + "type": "number" + }, + "Platforms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Architecture": { + "type": "string" + }, + "OS": { + "type": "string" + } + }, + "required": [ + "Architecture", + "OS" + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "updateConfigSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "rollbackConfigSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "modeSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "number" + } + }, + "additionalProperties": false + }, + "Global": { + "type": "object", + "properties": {} + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "number" + }, + "TotalCompletions": { + "type": "number" + } + }, + "additionalProperties": false + }, + "GlobalJob": { + "type": "object", + "properties": {} + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "labelsSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "networkSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "Target": { + "type": "string" + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "stopGracePeriodSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "integer", + "format": "int64" + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "endpointSpecSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Mode": { + "type": "string" + }, + "Ports": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string" + }, + "TargetPort": { + "type": "number" + }, + "PublishedPort": { + "type": "number" + }, + "PublishMode": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "ulimitsSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Soft": { + "type": "number" + }, + "Hard": { + "type": "number" + } + }, + "required": [ + "Name", + "Soft", + "Hard" + ], + "additionalProperties": false + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "replicas": { + "type": "number" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + }, + "buildType": { + "type": "string", + "enum": [ + "dockerfile", + "heroku_buildpacks", + "paketo_buildpacks", + "nixpacks", + "static", + "railpack" + ] + }, + "railpackVersion": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "herokuVersion": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "publishDirectory": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "isStaticSpa": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "createEnvFile": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "registryId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "rollbackRegistryId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "environmentId": { + "type": "string" + }, + "githubId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "gitlabId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "giteaId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "buildServerId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "buildRegistryId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.refreshToken": { + "post": { + "operationId": "application-refreshToken", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.deploy": { + "post": { + "operationId": "application-deploy", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": [ + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.cleanQueues": { + "post": { + "operationId": "application-cleanQueues", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.clearDeployments": { + "post": { + "operationId": "application-clearDeployments", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.killBuild": { + "post": { + "operationId": "application-killBuild", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.readTraefikConfig": { + "get": { + "operationId": "application-readTraefikConfig", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "applicationId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/drop-deployment": { + "post": { + "operationId": "application-dropDeployment", + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "zip": { + "format": "binary", + "type": "string" + }, + "dropBuildPath": { + "type": "string" + } + }, + "required": [ + "zip" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.updateTraefikConfig": { + "post": { + "operationId": "application-updateTraefikConfig", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "traefikConfig": { + "type": "string" + } + }, + "required": [ + "applicationId", + "traefikConfig" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.readAppMonitoring": { + "get": { + "operationId": "application-readAppMonitoring", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "appName", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.move": { + "post": { + "operationId": "application-move", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "targetEnvironmentId": { + "type": "string" + } + }, + "required": [ + "applicationId", + "targetEnvironmentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.cancelDeployment": { + "post": { + "operationId": "application-cancelDeployment", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + } + }, + "required": [ + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/application.search": { + "get": { + "operationId": "application-search", + "tags": [ + "application" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "name", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "appName", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "description", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "repository", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "owner", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "dockerImage", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "projectId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "environmentId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "limit", + "schema": { + "default": 20, + "type": "number" + } + }, + { + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mysql.create": { + "post": { + "operationId": "mysql-create", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "dockerImage": { + "default": "mysql:8", + "type": "string" + }, + "environmentId": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "databaseName": { + "type": "string" + }, + "databaseUser": { + "type": "string" + }, + "databasePassword": { + "type": "string" + }, + "databaseRootPassword": { + "type": "string" + }, + "serverId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "environmentId", + "databaseName", + "databaseUser", + "databasePassword" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mysql.one": { + "get": { + "operationId": "mysql-one", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "mysqlId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mysql.start": { + "post": { + "operationId": "mysql-start", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + } + }, + "required": [ + "mysqlId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mysql.stop": { + "post": { + "operationId": "mysql-stop", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + } + }, + "required": [ + "mysqlId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mysql.saveExternalPort": { + "post": { + "operationId": "mysql-saveExternalPort", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + }, + "externalPort": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "mysqlId", + "externalPort" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mysql.deploy": { + "post": { + "operationId": "mysql-deploy", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + } + }, + "required": [ + "mysqlId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mysql.changeStatus": { + "post": { + "operationId": "mysql-changeStatus", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + } + }, + "required": [ + "mysqlId", + "applicationStatus" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mysql.reload": { + "post": { + "operationId": "mysql-reload", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + }, + "appName": { + "type": "string" + } + }, + "required": [ + "mysqlId", + "appName" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mysql.remove": { + "post": { + "operationId": "mysql-remove", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + } + }, + "required": [ + "mysqlId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mysql.saveEnvironment": { + "post": { + "operationId": "mysql-saveEnvironment", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + }, + "env": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "mysqlId", + "env" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mysql.update": { + "post": { + "operationId": "mysql-update", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "databaseName": { + "type": "string" + }, + "databaseUser": { + "type": "string" + }, + "databasePassword": { + "type": "string" + }, + "databaseRootPassword": { + "type": "string" + }, + "dockerImage": { + "default": "mysql:8", + "type": "string" + }, + "command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "args": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "env": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "memoryReservation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "memoryLimit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cpuReservation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cpuLimit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "externalPort": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + }, + "healthCheckSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Test": { + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "number" + }, + "Timeout": { + "type": "number" + }, + "StartPeriod": { + "type": "number" + }, + "Retries": { + "type": "number" + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "restartPolicySwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Condition": { + "type": "string" + }, + "Delay": { + "type": "number" + }, + "MaxAttempts": { + "type": "number" + }, + "Window": { + "type": "number" + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "placementSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string" + } + }, + "required": [ + "SpreadDescriptor" + ] + } + }, + "required": [ + "Spread" + ], + "additionalProperties": false + } + }, + "MaxReplicas": { + "type": "number" + }, + "Platforms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Architecture": { + "type": "string" + }, + "OS": { + "type": "string" + } + }, + "required": [ + "Architecture", + "OS" + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "updateConfigSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "rollbackConfigSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "modeSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "number" + } + }, + "additionalProperties": false + }, + "Global": { + "type": "object", + "properties": {} + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "number" + }, + "TotalCompletions": { + "type": "number" + } + }, + "additionalProperties": false + }, + "GlobalJob": { + "type": "object", + "properties": {} + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "labelsSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "networkSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "Target": { + "type": "string" + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "stopGracePeriodSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "integer", + "format": "int64" + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "endpointSpecSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Mode": { + "type": "string" + }, + "Ports": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string" + }, + "TargetPort": { + "type": "number" + }, + "PublishedPort": { + "type": "number" + }, + "PublishMode": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "ulimitsSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Soft": { + "type": "number" + }, + "Hard": { + "type": "number" + } + }, + "required": [ + "Name", + "Soft", + "Hard" + ], + "additionalProperties": false + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "replicas": { + "type": "number" + }, + "createdAt": { + "type": "string" + }, + "environmentId": { + "type": "string" + } + }, + "required": [ + "mysqlId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mysql.move": { + "post": { + "operationId": "mysql-move", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + }, + "targetEnvironmentId": { + "type": "string" + } + }, + "required": [ + "mysqlId", + "targetEnvironmentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mysql.rebuild": { + "post": { + "operationId": "mysql-rebuild", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mysqlId": { + "type": "string" + } + }, + "required": [ + "mysqlId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mysql.search": { + "get": { + "operationId": "mysql-search", + "tags": [ + "mysql" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "name", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "appName", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "description", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "projectId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "environmentId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "limit", + "schema": { + "default": 20, + "type": "number" + } + }, + { + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/postgres.create": { + "post": { + "operationId": "postgres-create", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "databaseName": { + "type": "string" + }, + "databaseUser": { + "type": "string" + }, + "databasePassword": { + "type": "string" + }, + "dockerImage": { + "default": "postgres:18", + "type": "string" + }, + "environmentId": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serverId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "databaseName", + "databaseUser", + "databasePassword", + "environmentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/postgres.one": { + "get": { + "operationId": "postgres-one", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "postgresId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/postgres.start": { + "post": { + "operationId": "postgres-start", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + } + }, + "required": [ + "postgresId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/postgres.stop": { + "post": { + "operationId": "postgres-stop", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + } + }, + "required": [ + "postgresId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/postgres.saveExternalPort": { + "post": { + "operationId": "postgres-saveExternalPort", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + }, + "externalPort": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "postgresId", + "externalPort" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/postgres.deploy": { + "post": { + "operationId": "postgres-deploy", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + } + }, + "required": [ + "postgresId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/postgres.changeStatus": { + "post": { + "operationId": "postgres-changeStatus", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + } + }, + "required": [ + "postgresId", + "applicationStatus" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/postgres.remove": { + "post": { + "operationId": "postgres-remove", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + } + }, + "required": [ + "postgresId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/postgres.saveEnvironment": { + "post": { + "operationId": "postgres-saveEnvironment", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + }, + "env": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "postgresId", + "env" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/postgres.reload": { + "post": { + "operationId": "postgres-reload", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + }, + "appName": { + "type": "string" + } + }, + "required": [ + "postgresId", + "appName" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/postgres.update": { + "post": { + "operationId": "postgres-update", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "databaseName": { + "type": "string" + }, + "databaseUser": { + "type": "string" + }, + "databasePassword": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "dockerImage": { + "default": "postgres:18", + "type": "string" + }, + "command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "args": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "env": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "memoryReservation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "externalPort": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "memoryLimit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cpuReservation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cpuLimit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + }, + "healthCheckSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Test": { + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "number" + }, + "Timeout": { + "type": "number" + }, + "StartPeriod": { + "type": "number" + }, + "Retries": { + "type": "number" + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "restartPolicySwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Condition": { + "type": "string" + }, + "Delay": { + "type": "number" + }, + "MaxAttempts": { + "type": "number" + }, + "Window": { + "type": "number" + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "placementSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string" + } + }, + "required": [ + "SpreadDescriptor" + ] + } + }, + "required": [ + "Spread" + ], + "additionalProperties": false + } + }, + "MaxReplicas": { + "type": "number" + }, + "Platforms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Architecture": { + "type": "string" + }, + "OS": { + "type": "string" + } + }, + "required": [ + "Architecture", + "OS" + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "updateConfigSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "rollbackConfigSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "modeSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "number" + } + }, + "additionalProperties": false + }, + "Global": { + "type": "object", + "properties": {} + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "number" + }, + "TotalCompletions": { + "type": "number" + } + }, + "additionalProperties": false + }, + "GlobalJob": { + "type": "object", + "properties": {} + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "labelsSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "networkSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "Target": { + "type": "string" + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "stopGracePeriodSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "integer", + "format": "int64" + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "endpointSpecSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Mode": { + "type": "string" + }, + "Ports": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string" + }, + "TargetPort": { + "type": "number" + }, + "PublishedPort": { + "type": "number" + }, + "PublishMode": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "ulimitsSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Soft": { + "type": "number" + }, + "Hard": { + "type": "number" + } + }, + "required": [ + "Name", + "Soft", + "Hard" + ], + "additionalProperties": false + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "replicas": { + "type": "number" + }, + "createdAt": { + "type": "string" + }, + "environmentId": { + "type": "string" + } + }, + "required": [ + "postgresId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/postgres.move": { + "post": { + "operationId": "postgres-move", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + }, + "targetEnvironmentId": { + "type": "string" + } + }, + "required": [ + "postgresId", + "targetEnvironmentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/postgres.rebuild": { + "post": { + "operationId": "postgres-rebuild", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "postgresId": { + "type": "string" + } + }, + "required": [ + "postgresId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/postgres.search": { + "get": { + "operationId": "postgres-search", + "tags": [ + "postgres" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "name", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "appName", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "description", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "projectId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "environmentId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "limit", + "schema": { + "default": 20, + "type": "number" + } + }, + { + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redis.create": { + "post": { + "operationId": "redis-create", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "databasePassword": { + "type": "string" + }, + "dockerImage": { + "default": "redis:8", + "type": "string" + }, + "environmentId": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serverId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "databasePassword", + "environmentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redis.one": { + "get": { + "operationId": "redis-one", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "redisId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redis.start": { + "post": { + "operationId": "redis-start", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + } + }, + "required": [ + "redisId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redis.reload": { + "post": { + "operationId": "redis-reload", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + }, + "appName": { + "type": "string" + } + }, + "required": [ + "redisId", + "appName" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redis.stop": { + "post": { + "operationId": "redis-stop", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + } + }, + "required": [ + "redisId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redis.saveExternalPort": { + "post": { + "operationId": "redis-saveExternalPort", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + }, + "externalPort": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "redisId", + "externalPort" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redis.deploy": { + "post": { + "operationId": "redis-deploy", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + } + }, + "required": [ + "redisId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redis.changeStatus": { + "post": { + "operationId": "redis-changeStatus", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + } + }, + "required": [ + "redisId", + "applicationStatus" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redis.remove": { + "post": { + "operationId": "redis-remove", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + } + }, + "required": [ + "redisId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redis.saveEnvironment": { + "post": { + "operationId": "redis-saveEnvironment", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + }, + "env": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "redisId", + "env" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redis.update": { + "post": { + "operationId": "redis-update", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "databasePassword": { + "type": "string" + }, + "dockerImage": { + "default": "redis:8", + "type": "string" + }, + "command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "args": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "env": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "memoryReservation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "memoryLimit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cpuReservation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cpuLimit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "externalPort": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "createdAt": { + "type": "string" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + }, + "healthCheckSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Test": { + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "number" + }, + "Timeout": { + "type": "number" + }, + "StartPeriod": { + "type": "number" + }, + "Retries": { + "type": "number" + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "restartPolicySwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Condition": { + "type": "string" + }, + "Delay": { + "type": "number" + }, + "MaxAttempts": { + "type": "number" + }, + "Window": { + "type": "number" + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "placementSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string" + } + }, + "required": [ + "SpreadDescriptor" + ] + } + }, + "required": [ + "Spread" + ], + "additionalProperties": false + } + }, + "MaxReplicas": { + "type": "number" + }, + "Platforms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Architecture": { + "type": "string" + }, + "OS": { + "type": "string" + } + }, + "required": [ + "Architecture", + "OS" + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "updateConfigSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "rollbackConfigSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "modeSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "number" + } + }, + "additionalProperties": false + }, + "Global": { + "type": "object", + "properties": {} + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "number" + }, + "TotalCompletions": { + "type": "number" + } + }, + "additionalProperties": false + }, + "GlobalJob": { + "type": "object", + "properties": {} + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "labelsSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "networkSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "Target": { + "type": "string" + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "stopGracePeriodSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "integer", + "format": "int64" + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "endpointSpecSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Mode": { + "type": "string" + }, + "Ports": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string" + }, + "TargetPort": { + "type": "number" + }, + "PublishedPort": { + "type": "number" + }, + "PublishMode": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "ulimitsSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Soft": { + "type": "number" + }, + "Hard": { + "type": "number" + } + }, + "required": [ + "Name", + "Soft", + "Hard" + ], + "additionalProperties": false + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "replicas": { + "type": "number" + }, + "environmentId": { + "type": "string" + } + }, + "required": [ + "redisId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redis.move": { + "post": { + "operationId": "redis-move", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + }, + "targetEnvironmentId": { + "type": "string" + } + }, + "required": [ + "redisId", + "targetEnvironmentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redis.rebuild": { + "post": { + "operationId": "redis-rebuild", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redisId": { + "type": "string" + } + }, + "required": [ + "redisId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redis.search": { + "get": { + "operationId": "redis-search", + "tags": [ + "redis" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "name", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "appName", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "description", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "projectId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "environmentId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "limit", + "schema": { + "default": 20, + "type": "number" + } + }, + { + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mongo.create": { + "post": { + "operationId": "mongo-create", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "dockerImage": { + "default": "mongo:15", + "type": "string" + }, + "environmentId": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "databaseUser": { + "type": "string" + }, + "databasePassword": { + "type": "string" + }, + "serverId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "replicaSets": { + "anyOf": [ + { + "default": false, + "type": "boolean" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "environmentId", + "databaseUser", + "databasePassword" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mongo.one": { + "get": { + "operationId": "mongo-one", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "mongoId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mongo.start": { + "post": { + "operationId": "mongo-start", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + } + }, + "required": [ + "mongoId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mongo.stop": { + "post": { + "operationId": "mongo-stop", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + } + }, + "required": [ + "mongoId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mongo.saveExternalPort": { + "post": { + "operationId": "mongo-saveExternalPort", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + }, + "externalPort": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "mongoId", + "externalPort" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mongo.deploy": { + "post": { + "operationId": "mongo-deploy", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + } + }, + "required": [ + "mongoId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mongo.changeStatus": { + "post": { + "operationId": "mongo-changeStatus", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + } + }, + "required": [ + "mongoId", + "applicationStatus" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mongo.reload": { + "post": { + "operationId": "mongo-reload", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + }, + "appName": { + "type": "string" + } + }, + "required": [ + "mongoId", + "appName" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mongo.remove": { + "post": { + "operationId": "mongo-remove", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + } + }, + "required": [ + "mongoId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mongo.saveEnvironment": { + "post": { + "operationId": "mongo-saveEnvironment", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + }, + "env": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "mongoId", + "env" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mongo.update": { + "post": { + "operationId": "mongo-update", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "databaseUser": { + "type": "string" + }, + "databasePassword": { + "type": "string" + }, + "dockerImage": { + "default": "mongo:15", + "type": "string" + }, + "command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "args": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "env": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "memoryReservation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "memoryLimit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cpuReservation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cpuLimit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "externalPort": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + }, + "healthCheckSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Test": { + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "number" + }, + "Timeout": { + "type": "number" + }, + "StartPeriod": { + "type": "number" + }, + "Retries": { + "type": "number" + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "restartPolicySwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Condition": { + "type": "string" + }, + "Delay": { + "type": "number" + }, + "MaxAttempts": { + "type": "number" + }, + "Window": { + "type": "number" + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "placementSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string" + } + }, + "required": [ + "SpreadDescriptor" + ] + } + }, + "required": [ + "Spread" + ], + "additionalProperties": false + } + }, + "MaxReplicas": { + "type": "number" + }, + "Platforms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Architecture": { + "type": "string" + }, + "OS": { + "type": "string" + } + }, + "required": [ + "Architecture", + "OS" + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "updateConfigSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "rollbackConfigSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "modeSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "number" + } + }, + "additionalProperties": false + }, + "Global": { + "type": "object", + "properties": {} + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "number" + }, + "TotalCompletions": { + "type": "number" + } + }, + "additionalProperties": false + }, + "GlobalJob": { + "type": "object", + "properties": {} + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "labelsSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "networkSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "Target": { + "type": "string" + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "stopGracePeriodSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "integer", + "format": "int64" + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "endpointSpecSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Mode": { + "type": "string" + }, + "Ports": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string" + }, + "TargetPort": { + "type": "number" + }, + "PublishedPort": { + "type": "number" + }, + "PublishMode": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "ulimitsSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Soft": { + "type": "number" + }, + "Hard": { + "type": "number" + } + }, + "required": [ + "Name", + "Soft", + "Hard" + ], + "additionalProperties": false + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "replicas": { + "type": "number" + }, + "createdAt": { + "type": "string" + }, + "environmentId": { + "type": "string" + }, + "replicaSets": { + "anyOf": [ + { + "default": false, + "type": "boolean" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "mongoId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mongo.move": { + "post": { + "operationId": "mongo-move", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + }, + "targetEnvironmentId": { + "type": "string" + } + }, + "required": [ + "mongoId", + "targetEnvironmentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mongo.rebuild": { + "post": { + "operationId": "mongo-rebuild", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mongoId": { + "type": "string" + } + }, + "required": [ + "mongoId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mongo.search": { + "get": { + "operationId": "mongo-search", + "tags": [ + "mongo" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "name", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "appName", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "description", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "projectId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "environmentId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "limit", + "schema": { + "default": 20, + "type": "number" + } + }, + { + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mariadb.create": { + "post": { + "operationId": "mariadb-create", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "dockerImage": { + "default": "mariadb:6", + "type": "string" + }, + "databaseRootPassword": { + "type": "string" + }, + "environmentId": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "databaseName": { + "type": "string" + }, + "databaseUser": { + "type": "string" + }, + "databasePassword": { + "type": "string" + }, + "serverId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "environmentId", + "databaseName", + "databaseUser", + "databasePassword" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mariadb.one": { + "get": { + "operationId": "mariadb-one", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "mariadbId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mariadb.start": { + "post": { + "operationId": "mariadb-start", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + } + }, + "required": [ + "mariadbId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mariadb.stop": { + "post": { + "operationId": "mariadb-stop", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + } + }, + "required": [ + "mariadbId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mariadb.saveExternalPort": { + "post": { + "operationId": "mariadb-saveExternalPort", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + }, + "externalPort": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "mariadbId", + "externalPort" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mariadb.deploy": { + "post": { + "operationId": "mariadb-deploy", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + } + }, + "required": [ + "mariadbId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mariadb.changeStatus": { + "post": { + "operationId": "mariadb-changeStatus", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + } + }, + "required": [ + "mariadbId", + "applicationStatus" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mariadb.remove": { + "post": { + "operationId": "mariadb-remove", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + } + }, + "required": [ + "mariadbId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mariadb.saveEnvironment": { + "post": { + "operationId": "mariadb-saveEnvironment", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + }, + "env": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "mariadbId", + "env" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mariadb.reload": { + "post": { + "operationId": "mariadb-reload", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + }, + "appName": { + "type": "string" + } + }, + "required": [ + "mariadbId", + "appName" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mariadb.update": { + "post": { + "operationId": "mariadb-update", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "databaseName": { + "type": "string" + }, + "databaseUser": { + "type": "string" + }, + "databasePassword": { + "type": "string" + }, + "databaseRootPassword": { + "type": "string" + }, + "dockerImage": { + "default": "mariadb:6", + "type": "string" + }, + "command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "args": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "env": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "memoryReservation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "memoryLimit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cpuReservation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cpuLimit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "externalPort": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "applicationStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + }, + "healthCheckSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Test": { + "type": "array", + "items": { + "type": "string" + } + }, + "Interval": { + "type": "number" + }, + "Timeout": { + "type": "number" + }, + "StartPeriod": { + "type": "number" + }, + "Retries": { + "type": "number" + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "restartPolicySwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Condition": { + "type": "string" + }, + "Delay": { + "type": "number" + }, + "MaxAttempts": { + "type": "number" + }, + "Window": { + "type": "number" + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "placementSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Constraints": { + "type": "array", + "items": { + "type": "string" + } + }, + "Preferences": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "type": "string" + } + }, + "required": [ + "SpreadDescriptor" + ] + } + }, + "required": [ + "Spread" + ], + "additionalProperties": false + } + }, + "MaxReplicas": { + "type": "number" + }, + "Platforms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Architecture": { + "type": "string" + }, + "OS": { + "type": "string" + } + }, + "required": [ + "Architecture", + "OS" + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "updateConfigSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "rollbackConfigSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Parallelism": { + "type": "number" + }, + "Delay": { + "type": "number" + }, + "FailureAction": { + "type": "string" + }, + "Monitor": { + "type": "number" + }, + "MaxFailureRatio": { + "type": "number" + }, + "Order": { + "type": "string" + } + }, + "required": [ + "Parallelism", + "Order" + ], + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "modeSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "number" + } + }, + "additionalProperties": false + }, + "Global": { + "type": "object", + "properties": {} + }, + "ReplicatedJob": { + "type": "object", + "properties": { + "MaxConcurrent": { + "type": "number" + }, + "TotalCompletions": { + "type": "number" + } + }, + "additionalProperties": false + }, + "GlobalJob": { + "type": "object", + "properties": {} + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "labelsSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "networkSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "Target": { + "type": "string" + }, + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + }, + "DriverOpts": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "stopGracePeriodSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "integer", + "format": "int64" + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "endpointSpecSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "object", + "properties": { + "Mode": { + "type": "string" + }, + "Ports": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Protocol": { + "type": "string" + }, + "TargetPort": { + "type": "number" + }, + "PublishedPort": { + "type": "number" + }, + "PublishMode": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "ulimitsSwarm": { + "anyOf": [ + { + "anyOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Soft": { + "type": "number" + }, + "Hard": { + "type": "number" + } + }, + "required": [ + "Name", + "Soft", + "Hard" + ], + "additionalProperties": false + } + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "replicas": { + "type": "number" + }, + "createdAt": { + "type": "string" + }, + "environmentId": { + "type": "string" + } + }, + "required": [ + "mariadbId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mariadb.move": { + "post": { + "operationId": "mariadb-move", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + }, + "targetEnvironmentId": { + "type": "string" + } + }, + "required": [ + "mariadbId", + "targetEnvironmentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mariadb.rebuild": { + "post": { + "operationId": "mariadb-rebuild", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mariadbId": { + "type": "string" + } + }, + "required": [ + "mariadbId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mariadb.search": { + "get": { + "operationId": "mariadb-search", + "tags": [ + "mariadb" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "name", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "appName", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "description", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "projectId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "environmentId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "limit", + "schema": { + "default": 20, + "type": "number" + } + }, + { + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.create": { + "post": { + "operationId": "compose-create", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "environmentId": { + "type": "string" + }, + "composeType": { + "type": "string", + "enum": [ + "docker-compose", + "stack" + ] + }, + "appName": { + "type": "string" + }, + "serverId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "composeFile": { + "type": "string" + } + }, + "required": [ + "name", + "environmentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.one": { + "get": { + "operationId": "compose-one", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "composeId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.update": { + "post": { + "operationId": "compose-update", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "env": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "composeFile": { + "type": "string" + }, + "refreshToken": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sourceType": { + "type": "string", + "enum": [ + "git", + "github", + "gitlab", + "bitbucket", + "gitea", + "raw" + ] + }, + "composeType": { + "type": "string", + "enum": [ + "docker-compose", + "stack" + ] + }, + "repository": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "owner": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "branch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "autoDeploy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "gitlabProjectId": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "gitlabRepository": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "gitlabOwner": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "gitlabBranch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "gitlabPathNamespace": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketRepository": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketRepositorySlug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketOwner": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketBranch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "giteaRepository": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "giteaOwner": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "giteaBranch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "customGitUrl": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "customGitBranch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "customGitSSHKeyId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "command": { + "type": "string" + }, + "enableSubmodules": { + "type": "boolean" + }, + "composePath": { + "type": "string" + }, + "suffix": { + "type": "string" + }, + "randomize": { + "type": "boolean" + }, + "isolatedDeployment": { + "type": "boolean" + }, + "isolatedDeploymentsVolume": { + "type": "boolean" + }, + "triggerType": { + "anyOf": [ + { + "type": "string", + "enum": [ + "push", + "tag" + ] + }, + { + "type": "null" + } + ] + }, + "composeStatus": { + "type": "string", + "enum": [ + "idle", + "running", + "done", + "error" + ] + }, + "environmentId": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "watchPaths": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "githubId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "gitlabId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "bitbucketId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "giteaId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.delete": { + "post": { + "operationId": "compose-delete", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + }, + "deleteVolumes": { + "type": "boolean" + } + }, + "required": [ + "composeId", + "deleteVolumes" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.cleanQueues": { + "post": { + "operationId": "compose-cleanQueues", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + } + }, + "required": [ + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.clearDeployments": { + "post": { + "operationId": "compose-clearDeployments", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + } + }, + "required": [ + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.killBuild": { + "post": { + "operationId": "compose-killBuild", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + } + }, + "required": [ + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.loadServices": { + "get": { + "operationId": "compose-loadServices", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "composeId", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "type", + "schema": { + "default": "cache", + "type": "string", + "enum": [ + "fetch", + "cache" + ] + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.loadMountsByService": { + "get": { + "operationId": "compose-loadMountsByService", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "composeId", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "serviceName", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.fetchSourceType": { + "post": { + "operationId": "compose-fetchSourceType", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + } + }, + "required": [ + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.randomizeCompose": { + "post": { + "operationId": "compose-randomizeCompose", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + }, + "suffix": { + "type": "string" + } + }, + "required": [ + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.isolatedDeployment": { + "post": { + "operationId": "compose-isolatedDeployment", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + }, + "suffix": { + "type": "string" + } + }, + "required": [ + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.getConvertedCompose": { + "get": { + "operationId": "compose-getConvertedCompose", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "composeId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.deploy": { + "post": { + "operationId": "compose-deploy", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": [ + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.redeploy": { + "post": { + "operationId": "compose-redeploy", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": [ + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.stop": { + "post": { + "operationId": "compose-stop", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + } + }, + "required": [ + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.start": { + "post": { + "operationId": "compose-start", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + } + }, + "required": [ + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.getDefaultCommand": { + "get": { + "operationId": "compose-getDefaultCommand", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "composeId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.refreshToken": { + "post": { + "operationId": "compose-refreshToken", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + } + }, + "required": [ + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.deployTemplate": { + "post": { + "operationId": "compose-deployTemplate", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "environmentId": { + "type": "string" + }, + "serverId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "baseUrl": { + "type": "string" + } + }, + "required": [ + "environmentId", + "id" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.templates": { + "get": { + "operationId": "compose-templates", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "baseUrl", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.getTags": { + "get": { + "operationId": "compose-getTags", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "baseUrl", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.disconnectGitProvider": { + "post": { + "operationId": "compose-disconnectGitProvider", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + } + }, + "required": [ + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.move": { + "post": { + "operationId": "compose-move", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + }, + "targetEnvironmentId": { + "type": "string" + } + }, + "required": [ + "composeId", + "targetEnvironmentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.processTemplate": { + "post": { + "operationId": "compose-processTemplate", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "base64": { + "type": "string" + }, + "composeId": { + "type": "string" + } + }, + "required": [ + "base64", + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.import": { + "post": { + "operationId": "compose-import", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "base64": { + "type": "string" + }, + "composeId": { + "type": "string" + } + }, + "required": [ + "base64", + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.cancelDeployment": { + "post": { + "operationId": "compose-cancelDeployment", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "composeId": { + "type": "string" + } + }, + "required": [ + "composeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/compose.search": { + "get": { + "operationId": "compose-search", + "tags": [ + "compose" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "name", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "appName", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "description", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "projectId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "environmentId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "limit", + "schema": { + "default": 20, + "type": "number" + } + }, + { + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.all": { + "get": { + "operationId": "user-all", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.one": { + "get": { + "operationId": "user-one", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "userId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.get": { + "get": { + "operationId": "user-get", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.haveRootAccess": { + "get": { + "operationId": "user-haveRootAccess", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.getBackups": { + "get": { + "operationId": "user-getBackups", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.getServerMetrics": { + "get": { + "operationId": "user-getServerMetrics", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.update": { + "post": { + "operationId": "user-update", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "isRegistered": { + "type": "boolean" + }, + "expirationDate": { + "type": "string" + }, + "createdAt2": { + "type": "string" + }, + "createdAt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twoFactorEnabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "emailVerified": { + "type": "boolean" + }, + "image": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "banned": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "banReason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "banExpires": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "updatedAt": { + "type": "string" + }, + "enablePaidFeatures": { + "type": "boolean" + }, + "allowImpersonation": { + "type": "boolean" + }, + "enableEnterpriseFeatures": { + "type": "boolean" + }, + "licenseKey": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "stripeCustomerId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "stripeSubscriptionId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serversQuantity": { + "type": "number" + }, + "password": { + "type": "string" + }, + "currentPassword": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.getUserByToken": { + "get": { + "operationId": "user-getUserByToken", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "token", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.getMetricsToken": { + "get": { + "operationId": "user-getMetricsToken", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.remove": { + "post": { + "operationId": "user-remove", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "userId": { + "type": "string" + } + }, + "required": [ + "userId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.assignPermissions": { + "post": { + "operationId": "user-assignPermissions", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "accessedProjects": { + "type": "array", + "items": { + "type": "string" + } + }, + "accessedEnvironments": { + "type": "array", + "items": { + "type": "string" + } + }, + "accessedServices": { + "type": "array", + "items": { + "type": "string" + } + }, + "canCreateProjects": { + "type": "boolean" + }, + "canCreateServices": { + "type": "boolean" + }, + "canDeleteProjects": { + "type": "boolean" + }, + "canDeleteServices": { + "type": "boolean" + }, + "canAccessToDocker": { + "type": "boolean" + }, + "canAccessToTraefikFiles": { + "type": "boolean" + }, + "canAccessToAPI": { + "type": "boolean" + }, + "canAccessToSSHKeys": { + "type": "boolean" + }, + "canAccessToGitProviders": { + "type": "boolean" + }, + "canDeleteEnvironments": { + "type": "boolean" + }, + "canCreateEnvironments": { + "type": "boolean" + } + }, + "required": [ + "id", + "accessedProjects", + "accessedEnvironments", + "accessedServices", + "canCreateProjects", + "canCreateServices", + "canDeleteProjects", + "canDeleteServices", + "canAccessToDocker", + "canAccessToTraefikFiles", + "canAccessToAPI", + "canAccessToSSHKeys", + "canAccessToGitProviders", + "canDeleteEnvironments", + "canCreateEnvironments" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.getInvitations": { + "get": { + "operationId": "user-getInvitations", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.getContainerMetrics": { + "get": { + "operationId": "user-getContainerMetrics", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "url", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "token", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "appName", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "dataPoints", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.generateToken": { + "post": { + "operationId": "user-generateToken", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.deleteApiKey": { + "post": { + "operationId": "user-deleteApiKey", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "apiKeyId": { + "type": "string" + } + }, + "required": [ + "apiKeyId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.createApiKey": { + "post": { + "operationId": "user-createApiKey", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "prefix": { + "type": "string" + }, + "expiresIn": { + "type": "number" + }, + "metadata": { + "type": "object", + "properties": { + "organizationId": { + "type": "string" + } + }, + "required": [ + "organizationId" + ] + }, + "rateLimitEnabled": { + "type": "boolean" + }, + "rateLimitTimeWindow": { + "type": "number" + }, + "rateLimitMax": { + "type": "number" + }, + "remaining": { + "type": "number" + }, + "refillAmount": { + "type": "number" + }, + "refillInterval": { + "type": "number" + } + }, + "required": [ + "name", + "metadata" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.checkUserOrganizations": { + "get": { + "operationId": "user-checkUserOrganizations", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "userId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/user.sendInvitation": { + "post": { + "operationId": "user-sendInvitation", + "tags": [ + "user" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "invitationId": { + "type": "string" + }, + "notificationId": { + "type": "string" + } + }, + "required": [ + "invitationId", + "notificationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/domain.create": { + "post": { + "operationId": "domain-create", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "host": { + "type": "string" + }, + "path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "port": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "https": { + "type": "boolean" + }, + "applicationId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "certificateType": { + "type": "string", + "enum": [ + "letsencrypt", + "none", + "custom" + ] + }, + "customCertResolver": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "composeId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serviceName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "domainType": { + "anyOf": [ + { + "type": "string", + "enum": [ + "compose", + "application", + "preview" + ] + }, + { + "type": "null" + } + ] + }, + "previewDeploymentId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "internalPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "stripPath": { + "type": "boolean" + } + }, + "required": [ + "host" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/domain.byApplicationId": { + "get": { + "operationId": "domain-byApplicationId", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "applicationId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/domain.byComposeId": { + "get": { + "operationId": "domain-byComposeId", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "composeId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/domain.generateDomain": { + "post": { + "operationId": "domain-generateDomain", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appName": { + "type": "string" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "appName" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/domain.canGenerateTraefikMeDomains": { + "get": { + "operationId": "domain-canGenerateTraefikMeDomains", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/domain.update": { + "post": { + "operationId": "domain-update", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "host": { + "type": "string" + }, + "path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "port": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "https": { + "type": "boolean" + }, + "certificateType": { + "type": "string", + "enum": [ + "letsencrypt", + "none", + "custom" + ] + }, + "customCertResolver": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serviceName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "domainType": { + "anyOf": [ + { + "type": "string", + "enum": [ + "compose", + "application", + "preview" + ] + }, + { + "type": "null" + } + ] + }, + "internalPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "stripPath": { + "type": "boolean" + }, + "domainId": { + "type": "string" + } + }, + "required": [ + "host", + "domainId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/domain.one": { + "get": { + "operationId": "domain-one", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "domainId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/domain.delete": { + "post": { + "operationId": "domain-delete", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "domainId": { + "type": "string" + } + }, + "required": [ + "domainId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/domain.validateDomain": { + "post": { + "operationId": "domain-validateDomain", + "tags": [ + "domain" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "domain": { + "type": "string" + }, + "serverIp": { + "type": "string" + } + }, + "required": [ + "domain" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/destination.create": { + "post": { + "operationId": "destination-create", + "tags": [ + "destination" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "accessKey": { + "type": "string" + }, + "bucket": { + "type": "string" + }, + "region": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "secretAccessKey": { + "type": "string" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "name", + "provider", + "accessKey", + "bucket", + "region", + "endpoint", + "secretAccessKey" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/destination.testConnection": { + "post": { + "operationId": "destination-testConnection", + "tags": [ + "destination" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "accessKey": { + "type": "string" + }, + "bucket": { + "type": "string" + }, + "region": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "secretAccessKey": { + "type": "string" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "name", + "provider", + "accessKey", + "bucket", + "region", + "endpoint", + "secretAccessKey" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/destination.one": { + "get": { + "operationId": "destination-one", + "tags": [ + "destination" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "destinationId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/destination.all": { + "get": { + "operationId": "destination-all", + "tags": [ + "destination" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/destination.remove": { + "post": { + "operationId": "destination-remove", + "tags": [ + "destination" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "destinationId": { + "type": "string" + } + }, + "required": [ + "destinationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/destination.update": { + "post": { + "operationId": "destination-update", + "tags": [ + "destination" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "accessKey": { + "type": "string" + }, + "bucket": { + "type": "string" + }, + "region": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "secretAccessKey": { + "type": "string" + }, + "destinationId": { + "type": "string" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "name", + "accessKey", + "bucket", + "region", + "endpoint", + "secretAccessKey", + "destinationId", + "provider" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/backup.create": { + "post": { + "operationId": "backup-create", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "schedule": { + "type": "string" + }, + "enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "prefix": { + "type": "string" + }, + "destinationId": { + "type": "string" + }, + "keepLatestCount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "database": { + "type": "string" + }, + "mariadbId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mysqlId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "postgresId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mongoId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "databaseType": { + "type": "string", + "enum": [ + "postgres", + "mariadb", + "mysql", + "mongo", + "web-server" + ] + }, + "userId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "backupType": { + "type": "string", + "enum": [ + "database", + "compose" + ] + }, + "composeId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serviceName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "metadata": { + "anyOf": [ + {}, + { + "type": "null" + } + ] + } + }, + "required": [ + "schedule", + "prefix", + "destinationId", + "database", + "databaseType" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/backup.one": { + "get": { + "operationId": "backup-one", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "backupId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/backup.update": { + "post": { + "operationId": "backup-update", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "schedule": { + "type": "string" + }, + "enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "prefix": { + "type": "string" + }, + "backupId": { + "type": "string" + }, + "destinationId": { + "type": "string" + }, + "database": { + "type": "string" + }, + "keepLatestCount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "serviceName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "metadata": { + "anyOf": [ + {}, + { + "type": "null" + } + ] + }, + "databaseType": { + "type": "string", + "enum": [ + "postgres", + "mariadb", + "mysql", + "mongo", + "web-server" + ] + } + }, + "required": [ + "schedule", + "enabled", + "prefix", + "backupId", + "destinationId", + "database", + "keepLatestCount", + "serviceName", + "metadata", + "databaseType" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/backup.remove": { + "post": { + "operationId": "backup-remove", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "backupId": { + "type": "string" + } + }, + "required": [ + "backupId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/backup.manualBackupPostgres": { + "post": { + "operationId": "backup-manualBackupPostgres", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "backupId": { + "type": "string" + } + }, + "required": [ + "backupId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/backup.manualBackupMySql": { + "post": { + "operationId": "backup-manualBackupMySql", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "backupId": { + "type": "string" + } + }, + "required": [ + "backupId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/backup.manualBackupMariadb": { + "post": { + "operationId": "backup-manualBackupMariadb", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "backupId": { + "type": "string" + } + }, + "required": [ + "backupId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/backup.manualBackupCompose": { + "post": { + "operationId": "backup-manualBackupCompose", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "backupId": { + "type": "string" + } + }, + "required": [ + "backupId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/backup.manualBackupMongo": { + "post": { + "operationId": "backup-manualBackupMongo", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "backupId": { + "type": "string" + } + }, + "required": [ + "backupId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/backup.manualBackupWebServer": { + "post": { + "operationId": "backup-manualBackupWebServer", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "backupId": { + "type": "string" + } + }, + "required": [ + "backupId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/backup.listBackupFiles": { + "get": { + "operationId": "backup-listBackupFiles", + "tags": [ + "backup" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "destinationId", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "search", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/deployment.all": { + "get": { + "operationId": "deployment-all", + "tags": [ + "deployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "applicationId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/deployment.allByCompose": { + "get": { + "operationId": "deployment-allByCompose", + "tags": [ + "deployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "composeId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/deployment.allByServer": { + "get": { + "operationId": "deployment-allByServer", + "tags": [ + "deployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/deployment.allCentralized": { + "get": { + "operationId": "deployment-allCentralized", + "tags": [ + "deployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/deployment.queueList": { + "get": { + "operationId": "deployment-queueList", + "tags": [ + "deployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/deployment.allByType": { + "get": { + "operationId": "deployment-allByType", + "tags": [ + "deployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "type", + "schema": { + "type": "string", + "enum": [ + "application", + "compose", + "server", + "schedule", + "previewDeployment", + "backup", + "volumeBackup" + ] + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/deployment.killProcess": { + "post": { + "operationId": "deployment-killProcess", + "tags": [ + "deployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string" + } + }, + "required": [ + "deploymentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/deployment.removeDeployment": { + "post": { + "operationId": "deployment-removeDeployment", + "tags": [ + "deployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string" + } + }, + "required": [ + "deploymentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/previewDeployment.all": { + "get": { + "operationId": "previewDeployment-all", + "tags": [ + "previewDeployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "applicationId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/previewDeployment.delete": { + "post": { + "operationId": "previewDeployment-delete", + "tags": [ + "previewDeployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "previewDeploymentId": { + "type": "string" + } + }, + "required": [ + "previewDeploymentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/previewDeployment.one": { + "get": { + "operationId": "previewDeployment-one", + "tags": [ + "previewDeployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "previewDeploymentId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/previewDeployment.redeploy": { + "post": { + "operationId": "previewDeployment-redeploy", + "tags": [ + "previewDeployment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "previewDeploymentId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": [ + "previewDeploymentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mounts.create": { + "post": { + "operationId": "mounts-create", + "tags": [ + "mounts" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "bind", + "volume", + "file" + ] + }, + "hostPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "volumeName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "content": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mountPath": { + "type": "string" + }, + "serviceType": { + "type": "string", + "enum": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose" + ] + }, + "filePath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serviceId": { + "type": "string" + } + }, + "required": [ + "type", + "mountPath", + "serviceId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mounts.remove": { + "post": { + "operationId": "mounts-remove", + "tags": [ + "mounts" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mountId": { + "type": "string" + } + }, + "required": [ + "mountId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mounts.one": { + "get": { + "operationId": "mounts-one", + "tags": [ + "mounts" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "mountId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mounts.update": { + "post": { + "operationId": "mounts-update", + "tags": [ + "mounts" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "mountId": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "bind", + "volume", + "file" + ] + }, + "hostPath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "volumeName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "filePath": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "content": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serviceType": { + "type": "string", + "enum": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose" + ] + }, + "mountPath": { + "type": "string" + }, + "applicationId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "postgresId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mariadbId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mongoId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mysqlId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "redisId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "composeId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "mountId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mounts.allNamedByApplicationId": { + "get": { + "operationId": "mounts-allNamedByApplicationId", + "tags": [ + "mounts" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "applicationId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/mounts.listByServiceId": { + "get": { + "operationId": "mounts-listByServiceId", + "tags": [ + "mounts" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serviceId", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "serviceType", + "schema": { + "type": "string", + "enum": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose" + ] + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/certificates.create": { + "post": { + "operationId": "certificates-create", + "tags": [ + "certificates" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "certificateId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "certificateData": { + "type": "string" + }, + "privateKey": { + "type": "string" + }, + "certificatePath": { + "type": "string" + }, + "autoRenew": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "organizationId": { + "type": "string" + }, + "serverId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "certificateData", + "privateKey", + "organizationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/certificates.one": { + "get": { + "operationId": "certificates-one", + "tags": [ + "certificates" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "certificateId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/certificates.remove": { + "post": { + "operationId": "certificates-remove", + "tags": [ + "certificates" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "certificateId": { + "type": "string" + } + }, + "required": [ + "certificateId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/certificates.all": { + "get": { + "operationId": "certificates-all", + "tags": [ + "certificates" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.getWebServerSettings": { + "get": { + "operationId": "settings-getWebServerSettings", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.reloadServer": { + "post": { + "operationId": "settings-reloadServer", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.cleanRedis": { + "post": { + "operationId": "settings-cleanRedis", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.reloadRedis": { + "post": { + "operationId": "settings-reloadRedis", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.cleanAllDeploymentQueue": { + "post": { + "operationId": "settings-cleanAllDeploymentQueue", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.reloadTraefik": { + "post": { + "operationId": "settings-reloadTraefik", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.toggleDashboard": { + "post": { + "operationId": "settings-toggleDashboard", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "enableDashboard": { + "type": "boolean" + }, + "serverId": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.cleanUnusedImages": { + "post": { + "operationId": "settings-cleanUnusedImages", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.cleanUnusedVolumes": { + "post": { + "operationId": "settings-cleanUnusedVolumes", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.cleanStoppedContainers": { + "post": { + "operationId": "settings-cleanStoppedContainers", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.cleanDockerBuilder": { + "post": { + "operationId": "settings-cleanDockerBuilder", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.cleanDockerPrune": { + "post": { + "operationId": "settings-cleanDockerPrune", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.cleanAll": { + "post": { + "operationId": "settings-cleanAll", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.cleanMonitoring": { + "post": { + "operationId": "settings-cleanMonitoring", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.saveSSHPrivateKey": { + "post": { + "operationId": "settings-saveSSHPrivateKey", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sshPrivateKey": { + "type": "string" + } + }, + "required": [ + "sshPrivateKey" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.assignDomainServer": { + "post": { + "operationId": "settings-assignDomainServer", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "host": { + "type": "string" + }, + "certificateType": { + "type": "string", + "enum": [ + "letsencrypt", + "none", + "custom" + ] + }, + "letsEncryptEmail": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "const": "" + } + ] + }, + { + "type": "null" + } + ] + }, + "https": { + "type": "boolean" + } + }, + "required": [ + "host", + "certificateType" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.cleanSSHPrivateKey": { + "post": { + "operationId": "settings-cleanSSHPrivateKey", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.updateDockerCleanup": { + "post": { + "operationId": "settings-updateDockerCleanup", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "enableDockerCleanup": { + "type": "boolean" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "enableDockerCleanup" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.readTraefikConfig": { + "get": { + "operationId": "settings-readTraefikConfig", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.updateTraefikConfig": { + "post": { + "operationId": "settings-updateTraefikConfig", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "traefikConfig": { + "type": "string" + } + }, + "required": [ + "traefikConfig" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.readWebServerTraefikConfig": { + "get": { + "operationId": "settings-readWebServerTraefikConfig", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.updateWebServerTraefikConfig": { + "post": { + "operationId": "settings-updateWebServerTraefikConfig", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "traefikConfig": { + "type": "string" + } + }, + "required": [ + "traefikConfig" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.readMiddlewareTraefikConfig": { + "get": { + "operationId": "settings-readMiddlewareTraefikConfig", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.updateMiddlewareTraefikConfig": { + "post": { + "operationId": "settings-updateMiddlewareTraefikConfig", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "traefikConfig": { + "type": "string" + } + }, + "required": [ + "traefikConfig" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.getUpdateData": { + "post": { + "operationId": "settings-getUpdateData", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.updateServer": { + "post": { + "operationId": "settings-updateServer", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.getDokployVersion": { + "get": { + "operationId": "settings-getDokployVersion", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.getReleaseTag": { + "get": { + "operationId": "settings-getReleaseTag", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.readDirectories": { + "get": { + "operationId": "settings-readDirectories", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.updateTraefikFile": { + "post": { + "operationId": "settings-updateTraefikFile", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "traefikConfig": { + "type": "string" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "path", + "traefikConfig" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.readTraefikFile": { + "get": { + "operationId": "settings-readTraefikFile", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "path", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.getIp": { + "get": { + "operationId": "settings-getIp", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.updateServerIp": { + "post": { + "operationId": "settings-updateServerIp", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverIp": { + "type": "string" + } + }, + "required": [ + "serverIp" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.getOpenApiDocument": { + "get": { + "operationId": "settings-getOpenApiDocument", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.readTraefikEnv": { + "get": { + "operationId": "settings-readTraefikEnv", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.writeTraefikEnv": { + "post": { + "operationId": "settings-writeTraefikEnv", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "env": { + "type": "string" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "env" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.haveTraefikDashboardPortEnabled": { + "get": { + "operationId": "settings-haveTraefikDashboardPortEnabled", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.haveActivateRequests": { + "get": { + "operationId": "settings-haveActivateRequests", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.toggleRequests": { + "post": { + "operationId": "settings-toggleRequests", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "enable": { + "type": "boolean" + } + }, + "required": [ + "enable" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.isCloud": { + "get": { + "operationId": "settings-isCloud", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.isUserSubscribed": { + "get": { + "operationId": "settings-isUserSubscribed", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.health": { + "get": { + "operationId": "settings-health", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.setupGPU": { + "post": { + "operationId": "settings-setupGPU", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.checkGPUStatus": { + "get": { + "operationId": "settings-checkGPUStatus", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.updateTraefikPorts": { + "post": { + "operationId": "settings-updateTraefikPorts", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + }, + "additionalPorts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "targetPort": { + "type": "number" + }, + "publishedPort": { + "type": "number" + }, + "protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + } + }, + "required": [ + "targetPort", + "publishedPort", + "protocol" + ] + } + } + }, + "required": [ + "additionalPorts" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.getTraefikPorts": { + "get": { + "operationId": "settings-getTraefikPorts", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.updateLogCleanup": { + "post": { + "operationId": "settings-updateLogCleanup", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "cronExpression": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "cronExpression" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.getLogCleanupStatus": { + "get": { + "operationId": "settings-getLogCleanupStatus", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/settings.getDokployCloudIps": { + "get": { + "operationId": "settings-getDokployCloudIps", + "tags": [ + "settings" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/security.create": { + "post": { + "operationId": "security-create", + "tags": [ + "security" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + }, + "required": [ + "applicationId", + "username", + "password" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/security.one": { + "get": { + "operationId": "security-one", + "tags": [ + "security" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "securityId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/security.delete": { + "post": { + "operationId": "security-delete", + "tags": [ + "security" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "securityId": { + "type": "string" + } + }, + "required": [ + "securityId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/security.update": { + "post": { + "operationId": "security-update", + "tags": [ + "security" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "securityId": { + "type": "string" + }, + "username": { + "type": "string" + }, + "password": { + "type": "string" + } + }, + "required": [ + "securityId", + "username", + "password" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redirects.create": { + "post": { + "operationId": "redirects-create", + "tags": [ + "redirects" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "regex": { + "type": "string" + }, + "replacement": { + "type": "string" + }, + "permanent": { + "type": "boolean" + }, + "applicationId": { + "type": "string" + } + }, + "required": [ + "regex", + "replacement", + "permanent", + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redirects.one": { + "get": { + "operationId": "redirects-one", + "tags": [ + "redirects" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "redirectId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redirects.delete": { + "post": { + "operationId": "redirects-delete", + "tags": [ + "redirects" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redirectId": { + "type": "string" + } + }, + "required": [ + "redirectId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/redirects.update": { + "post": { + "operationId": "redirects-update", + "tags": [ + "redirects" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redirectId": { + "type": "string" + }, + "regex": { + "type": "string" + }, + "replacement": { + "type": "string" + }, + "permanent": { + "type": "boolean" + } + }, + "required": [ + "redirectId", + "regex", + "replacement", + "permanent" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/port.create": { + "post": { + "operationId": "port-create", + "tags": [ + "port" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "publishedPort": { + "type": "number" + }, + "publishMode": { + "default": "ingress", + "type": "string", + "enum": [ + "ingress", + "host" + ] + }, + "targetPort": { + "type": "number" + }, + "protocol": { + "default": "tcp", + "type": "string", + "enum": [ + "tcp", + "udp" + ] + }, + "applicationId": { + "type": "string" + } + }, + "required": [ + "publishedPort", + "publishMode", + "targetPort", + "protocol", + "applicationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/port.one": { + "get": { + "operationId": "port-one", + "tags": [ + "port" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "portId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/port.delete": { + "post": { + "operationId": "port-delete", + "tags": [ + "port" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "portId": { + "type": "string" + } + }, + "required": [ + "portId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/port.update": { + "post": { + "operationId": "port-update", + "tags": [ + "port" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "portId": { + "type": "string" + }, + "publishedPort": { + "type": "number" + }, + "publishMode": { + "default": "ingress", + "type": "string", + "enum": [ + "ingress", + "host" + ] + }, + "targetPort": { + "type": "number" + }, + "protocol": { + "default": "tcp", + "type": "string", + "enum": [ + "tcp", + "udp" + ] + } + }, + "required": [ + "portId", + "publishedPort", + "publishMode", + "targetPort", + "protocol" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/registry.create": { + "post": { + "operationId": "registry-create", + "tags": [ + "registry" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "registryName": { + "type": "string" + }, + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "registryUrl": { + "type": "string" + }, + "registryType": { + "type": "string", + "enum": [ + "cloud" + ] + }, + "imagePrefix": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "registryName", + "username", + "password", + "registryUrl", + "registryType", + "imagePrefix" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/registry.remove": { + "post": { + "operationId": "registry-remove", + "tags": [ + "registry" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "registryId": { + "type": "string" + } + }, + "required": [ + "registryId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/registry.update": { + "post": { + "operationId": "registry-update", + "tags": [ + "registry" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "registryId": { + "type": "string" + }, + "registryName": { + "type": "string" + }, + "imagePrefix": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + { + "type": "null" + } + ] + }, + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "registryUrl": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "registryType": { + "type": "string", + "enum": [ + "cloud" + ] + }, + "organizationId": { + "type": "string" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "registryId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/registry.all": { + "get": { + "operationId": "registry-all", + "tags": [ + "registry" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/registry.one": { + "get": { + "operationId": "registry-one", + "tags": [ + "registry" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "registryId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/registry.testRegistry": { + "post": { + "operationId": "registry-testRegistry", + "tags": [ + "registry" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "registryName": { + "type": "string" + }, + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "registryUrl": { + "type": "string" + }, + "registryType": { + "type": "string", + "enum": [ + "cloud" + ] + }, + "imagePrefix": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "username", + "password", + "registryUrl", + "registryType" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/registry.testRegistryById": { + "post": { + "operationId": "registry-testRegistryById", + "tags": [ + "registry" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "registryId": { + "type": "string" + }, + "serverId": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/cluster.getNodes": { + "get": { + "operationId": "cluster-getNodes", + "tags": [ + "cluster" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/cluster.removeWorker": { + "post": { + "operationId": "cluster-removeWorker", + "tags": [ + "cluster" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "nodeId": { + "type": "string" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "nodeId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/cluster.addWorker": { + "get": { + "operationId": "cluster-addWorker", + "tags": [ + "cluster" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/cluster.addManager": { + "get": { + "operationId": "cluster-addManager", + "tags": [ + "cluster" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.createSlack": { + "post": { + "operationId": "notification-createSlack", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "webhookUrl": { + "type": "string" + }, + "channel": { + "type": "string" + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverThreshold", + "webhookUrl", + "channel" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.updateSlack": { + "post": { + "operationId": "notification-updateSlack", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "webhookUrl": { + "type": "string" + }, + "channel": { + "type": "string" + }, + "notificationId": { + "type": "string" + }, + "slackId": { + "type": "string" + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "slackId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.testSlackConnection": { + "post": { + "operationId": "notification-testSlackConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "webhookUrl": { + "type": "string" + }, + "channel": { + "type": "string" + } + }, + "required": [ + "webhookUrl", + "channel" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.createTelegram": { + "post": { + "operationId": "notification-createTelegram", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "botToken": { + "type": "string" + }, + "chatId": { + "type": "string" + }, + "messageThreadId": { + "type": "string" + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverThreshold", + "botToken", + "chatId", + "messageThreadId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.updateTelegram": { + "post": { + "operationId": "notification-updateTelegram", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "botToken": { + "type": "string" + }, + "chatId": { + "type": "string" + }, + "messageThreadId": { + "type": "string" + }, + "notificationId": { + "type": "string" + }, + "telegramId": { + "type": "string" + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "telegramId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.testTelegramConnection": { + "post": { + "operationId": "notification-testTelegramConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "botToken": { + "type": "string" + }, + "chatId": { + "type": "string" + }, + "messageThreadId": { + "type": "string" + } + }, + "required": [ + "botToken", + "chatId", + "messageThreadId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.createDiscord": { + "post": { + "operationId": "notification-createDiscord", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "webhookUrl": { + "type": "string" + }, + "decoration": { + "type": "boolean" + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverThreshold", + "webhookUrl", + "decoration" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.updateDiscord": { + "post": { + "operationId": "notification-updateDiscord", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "webhookUrl": { + "type": "string" + }, + "decoration": { + "type": "boolean" + }, + "notificationId": { + "type": "string" + }, + "discordId": { + "type": "string" + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "discordId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.testDiscordConnection": { + "post": { + "operationId": "notification-testDiscordConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "webhookUrl": { + "type": "string" + }, + "decoration": { + "type": "boolean" + } + }, + "required": [ + "webhookUrl" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.createEmail": { + "post": { + "operationId": "notification-createEmail", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "smtpServer": { + "type": "string" + }, + "smtpPort": { + "type": "number" + }, + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "fromAddress": { + "type": "string" + }, + "toAddresses": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverThreshold", + "smtpServer", + "smtpPort", + "username", + "password", + "fromAddress", + "toAddresses" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.updateEmail": { + "post": { + "operationId": "notification-updateEmail", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "smtpServer": { + "type": "string" + }, + "smtpPort": { + "type": "number" + }, + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "fromAddress": { + "type": "string" + }, + "toAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "notificationId": { + "type": "string" + }, + "emailId": { + "type": "string" + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "emailId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.testEmailConnection": { + "post": { + "operationId": "notification-testEmailConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "smtpServer": { + "type": "string" + }, + "smtpPort": { + "type": "number" + }, + "username": { + "type": "string" + }, + "password": { + "type": "string" + }, + "toAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "fromAddress": { + "type": "string" + } + }, + "required": [ + "smtpServer", + "smtpPort", + "username", + "password", + "toAddresses", + "fromAddress" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.createResend": { + "post": { + "operationId": "notification-createResend", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "apiKey": { + "type": "string" + }, + "fromAddress": { + "type": "string" + }, + "toAddresses": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverThreshold", + "apiKey", + "fromAddress", + "toAddresses" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.updateResend": { + "post": { + "operationId": "notification-updateResend", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "apiKey": { + "type": "string" + }, + "fromAddress": { + "type": "string" + }, + "toAddresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "notificationId": { + "type": "string" + }, + "resendId": { + "type": "string" + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "resendId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.testResendConnection": { + "post": { + "operationId": "notification-testResendConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "apiKey": { + "type": "string" + }, + "fromAddress": { + "type": "string" + }, + "toAddresses": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "apiKey", + "fromAddress", + "toAddresses" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.remove": { + "post": { + "operationId": "notification-remove", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "notificationId": { + "type": "string" + } + }, + "required": [ + "notificationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.one": { + "get": { + "operationId": "notification-one", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "notificationId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.all": { + "get": { + "operationId": "notification-all", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.receiveNotification": { + "post": { + "operationId": "notification-receiveNotification", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ServerType": { + "default": "Dokploy", + "type": "string", + "enum": [ + "Dokploy", + "Remote" + ] + }, + "Type": { + "type": "string", + "enum": [ + "Memory", + "CPU" + ] + }, + "Value": { + "type": "number" + }, + "Threshold": { + "type": "number" + }, + "Message": { + "type": "string" + }, + "Timestamp": { + "type": "string" + }, + "Token": { + "type": "string" + } + }, + "required": [ + "Type", + "Value", + "Threshold", + "Message", + "Timestamp", + "Token" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.createGotify": { + "post": { + "operationId": "notification-createGotify", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverUrl": { + "type": "string" + }, + "appToken": { + "type": "string" + }, + "priority": { + "type": "number" + }, + "decoration": { + "type": "boolean" + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverUrl", + "appToken", + "priority", + "decoration" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.updateGotify": { + "post": { + "operationId": "notification-updateGotify", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverUrl": { + "type": "string" + }, + "appToken": { + "type": "string" + }, + "priority": { + "type": "number" + }, + "decoration": { + "type": "boolean" + }, + "notificationId": { + "type": "string" + }, + "gotifyId": { + "type": "string" + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "gotifyId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.testGotifyConnection": { + "post": { + "operationId": "notification-testGotifyConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverUrl": { + "type": "string" + }, + "appToken": { + "type": "string" + }, + "priority": { + "type": "number" + }, + "decoration": { + "type": "boolean" + } + }, + "required": [ + "serverUrl", + "appToken", + "priority" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.createNtfy": { + "post": { + "operationId": "notification-createNtfy", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverUrl": { + "type": "string" + }, + "topic": { + "type": "string" + }, + "accessToken": { + "type": "string" + }, + "priority": { + "type": "number" + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverUrl", + "topic", + "accessToken", + "priority" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.updateNtfy": { + "post": { + "operationId": "notification-updateNtfy", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverUrl": { + "type": "string" + }, + "topic": { + "type": "string" + }, + "accessToken": { + "type": "string" + }, + "priority": { + "type": "number" + }, + "notificationId": { + "type": "string" + }, + "ntfyId": { + "type": "string" + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "ntfyId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.testNtfyConnection": { + "post": { + "operationId": "notification-testNtfyConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverUrl": { + "type": "string" + }, + "topic": { + "type": "string" + }, + "accessToken": { + "type": "string" + }, + "priority": { + "type": "number" + } + }, + "required": [ + "serverUrl", + "topic", + "accessToken", + "priority" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.createCustom": { + "post": { + "operationId": "notification-createCustom", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "endpoint": { + "type": "string" + }, + "headers": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + } + }, + "required": [ + "name", + "endpoint" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.updateCustom": { + "post": { + "operationId": "notification-updateCustom", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "endpoint": { + "type": "string" + }, + "headers": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + }, + "notificationId": { + "type": "string" + }, + "customId": { + "type": "string" + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "customId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.testCustomConnection": { + "post": { + "operationId": "notification-testCustomConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "endpoint": { + "type": "string" + }, + "headers": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": { + "type": "string" + } + } + }, + "required": [ + "endpoint" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.createLark": { + "post": { + "operationId": "notification-createLark", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "webhookUrl": { + "type": "string" + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverThreshold", + "webhookUrl" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.updateLark": { + "post": { + "operationId": "notification-updateLark", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "webhookUrl": { + "type": "string" + }, + "notificationId": { + "type": "string" + }, + "larkId": { + "type": "string" + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "larkId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.testLarkConnection": { + "post": { + "operationId": "notification-testLarkConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "webhookUrl": { + "type": "string" + } + }, + "required": [ + "webhookUrl" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.createTeams": { + "post": { + "operationId": "notification-createTeams", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "webhookUrl": { + "type": "string" + } + }, + "required": [ + "appBuildError", + "databaseBackup", + "volumeBackup", + "dokployRestart", + "name", + "appDeploy", + "dockerCleanup", + "serverThreshold", + "webhookUrl" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.updateTeams": { + "post": { + "operationId": "notification-updateTeams", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "webhookUrl": { + "type": "string" + }, + "notificationId": { + "type": "string" + }, + "teamsId": { + "type": "string" + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "notificationId", + "teamsId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.testTeamsConnection": { + "post": { + "operationId": "notification-testTeamsConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "webhookUrl": { + "type": "string" + } + }, + "required": [ + "webhookUrl" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.createPushover": { + "post": { + "operationId": "notification-createPushover", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + }, + "userKey": { + "type": "string" + }, + "apiToken": { + "type": "string" + }, + "priority": { + "default": 0, + "type": "number" + }, + "retry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "expire": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "userKey", + "apiToken" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.updatePushover": { + "post": { + "operationId": "notification-updatePushover", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "notificationId": { + "type": "string" + }, + "pushoverId": { + "type": "string" + }, + "organizationId": { + "type": "string" + }, + "userKey": { + "type": "string" + }, + "apiToken": { + "type": "string" + }, + "priority": { + "type": "number" + }, + "retry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "expire": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "appBuildError": { + "type": "boolean" + }, + "databaseBackup": { + "type": "boolean" + }, + "volumeBackup": { + "type": "boolean" + }, + "dokployRestart": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "appDeploy": { + "type": "boolean" + }, + "dockerCleanup": { + "type": "boolean" + }, + "serverThreshold": { + "type": "boolean" + } + }, + "required": [ + "notificationId", + "pushoverId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.testPushoverConnection": { + "post": { + "operationId": "notification-testPushoverConnection", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "userKey": { + "type": "string" + }, + "apiToken": { + "type": "string" + }, + "priority": { + "type": "number" + }, + "retry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "expire": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "userKey", + "apiToken", + "priority" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/notification.getEmailProviders": { + "get": { + "operationId": "notification-getEmailProviders", + "tags": [ + "notification" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sshKey.create": { + "post": { + "operationId": "sshKey-create", + "tags": [ + "sshKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "privateKey": { + "type": "string" + }, + "publicKey": { + "type": "string" + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "name", + "privateKey", + "publicKey", + "organizationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sshKey.remove": { + "post": { + "operationId": "sshKey-remove", + "tags": [ + "sshKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sshKeyId": { + "type": "string" + } + }, + "required": [ + "sshKeyId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sshKey.one": { + "get": { + "operationId": "sshKey-one", + "tags": [ + "sshKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "sshKeyId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sshKey.all": { + "get": { + "operationId": "sshKey-all", + "tags": [ + "sshKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sshKey.generate": { + "post": { + "operationId": "sshKey-generate", + "tags": [ + "sshKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "rsa", + "ed25519" + ] + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sshKey.update": { + "post": { + "operationId": "sshKey-update", + "tags": [ + "sshKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "lastUsedAt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sshKeyId": { + "type": "string" + } + }, + "required": [ + "sshKeyId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitProvider.getAll": { + "get": { + "operationId": "gitProvider-getAll", + "tags": [ + "gitProvider" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitProvider.remove": { + "post": { + "operationId": "gitProvider-remove", + "tags": [ + "gitProvider" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "gitProviderId": { + "type": "string" + } + }, + "required": [ + "gitProviderId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitea.create": { + "post": { + "operationId": "gitea-create", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "giteaId": { + "type": "string" + }, + "giteaUrl": { + "type": "string" + }, + "giteaInternalUrl": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "redirectUri": { + "type": "string" + }, + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "gitProviderId": { + "type": "string" + }, + "accessToken": { + "type": "string" + }, + "refreshToken": { + "type": "string" + }, + "expiresAt": { + "type": "number" + }, + "scopes": { + "type": "string" + }, + "lastAuthenticatedAt": { + "type": "number" + }, + "name": { + "type": "string" + }, + "giteaUsername": { + "type": "string" + }, + "organizationName": { + "type": "string" + } + }, + "required": [ + "giteaUrl", + "name" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitea.one": { + "get": { + "operationId": "gitea-one", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "giteaId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitea.giteaProviders": { + "get": { + "operationId": "gitea-giteaProviders", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitea.getGiteaRepositories": { + "get": { + "operationId": "gitea-getGiteaRepositories", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "giteaId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitea.getGiteaBranches": { + "get": { + "operationId": "gitea-getGiteaBranches", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "owner", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "repositoryName", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "giteaId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitea.testConnection": { + "post": { + "operationId": "gitea-testConnection", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "giteaId": { + "type": "string" + }, + "organizationName": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitea.update": { + "post": { + "operationId": "gitea-update", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "giteaId": { + "type": "string" + }, + "giteaUrl": { + "type": "string" + }, + "giteaInternalUrl": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "redirectUri": { + "type": "string" + }, + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "gitProviderId": { + "type": "string" + }, + "accessToken": { + "type": "string" + }, + "refreshToken": { + "type": "string" + }, + "expiresAt": { + "type": "number" + }, + "scopes": { + "type": "string" + }, + "lastAuthenticatedAt": { + "type": "number" + }, + "name": { + "type": "string" + }, + "giteaUsername": { + "type": "string" + }, + "organizationName": { + "type": "string" + } + }, + "required": [ + "giteaId", + "giteaUrl", + "gitProviderId", + "name" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitea.getGiteaUrl": { + "get": { + "operationId": "gitea-getGiteaUrl", + "tags": [ + "gitea" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "giteaId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/bitbucket.create": { + "post": { + "operationId": "bitbucket-create", + "tags": [ + "bitbucket" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "bitbucketId": { + "type": "string" + }, + "bitbucketUsername": { + "type": "string" + }, + "bitbucketEmail": { + "type": "string" + }, + "appPassword": { + "type": "string" + }, + "apiToken": { + "type": "string" + }, + "bitbucketWorkspaceName": { + "type": "string" + }, + "gitProviderId": { + "type": "string" + }, + "authId": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "authId", + "name" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/bitbucket.one": { + "get": { + "operationId": "bitbucket-one", + "tags": [ + "bitbucket" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "bitbucketId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/bitbucket.bitbucketProviders": { + "get": { + "operationId": "bitbucket-bitbucketProviders", + "tags": [ + "bitbucket" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/bitbucket.getBitbucketRepositories": { + "get": { + "operationId": "bitbucket-getBitbucketRepositories", + "tags": [ + "bitbucket" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "bitbucketId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/bitbucket.getBitbucketBranches": { + "get": { + "operationId": "bitbucket-getBitbucketBranches", + "tags": [ + "bitbucket" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "owner", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "repo", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "bitbucketId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/bitbucket.testConnection": { + "post": { + "operationId": "bitbucket-testConnection", + "tags": [ + "bitbucket" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "bitbucketId": { + "type": "string" + }, + "bitbucketUsername": { + "type": "string" + }, + "bitbucketEmail": { + "type": "string" + }, + "workspaceName": { + "type": "string" + }, + "apiToken": { + "type": "string" + }, + "appPassword": { + "type": "string" + } + }, + "required": [ + "bitbucketId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/bitbucket.update": { + "post": { + "operationId": "bitbucket-update", + "tags": [ + "bitbucket" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "bitbucketId": { + "type": "string" + }, + "bitbucketUsername": { + "type": "string" + }, + "bitbucketEmail": { + "type": "string" + }, + "appPassword": { + "type": "string" + }, + "apiToken": { + "type": "string" + }, + "bitbucketWorkspaceName": { + "type": "string" + }, + "gitProviderId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "organizationId": { + "type": "string" + } + }, + "required": [ + "bitbucketId", + "gitProviderId", + "name" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitlab.create": { + "post": { + "operationId": "gitlab-create", + "tags": [ + "gitlab" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "secret": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "gitProviderId": { + "type": "string" + }, + "redirectUri": { + "type": "string" + }, + "authId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "gitlabUrl": { + "type": "string" + }, + "gitlabInternalUrl": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "authId", + "name", + "gitlabUrl" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitlab.one": { + "get": { + "operationId": "gitlab-one", + "tags": [ + "gitlab" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "gitlabId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitlab.gitlabProviders": { + "get": { + "operationId": "gitlab-gitlabProviders", + "tags": [ + "gitlab" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitlab.getGitlabRepositories": { + "get": { + "operationId": "gitlab-getGitlabRepositories", + "tags": [ + "gitlab" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "gitlabId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitlab.getGitlabBranches": { + "get": { + "operationId": "gitlab-getGitlabBranches", + "tags": [ + "gitlab" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "number" + } + }, + { + "in": "query", + "name": "owner", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "repo", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "gitlabId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitlab.testConnection": { + "post": { + "operationId": "gitlab-testConnection", + "tags": [ + "gitlab" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "gitlabId": { + "type": "string" + }, + "groupName": { + "type": "string" + } + }, + "required": [ + "gitlabId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/gitlab.update": { + "post": { + "operationId": "gitlab-update", + "tags": [ + "gitlab" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applicationId": { + "type": "string" + }, + "secret": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "redirectUri": { + "type": "string" + }, + "name": { + "type": "string" + }, + "gitlabId": { + "type": "string" + }, + "gitlabUrl": { + "type": "string" + }, + "gitProviderId": { + "type": "string" + }, + "gitlabInternalUrl": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "gitlabId", + "gitlabUrl", + "gitProviderId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/github.one": { + "get": { + "operationId": "github-one", + "tags": [ + "github" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "githubId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/github.getGithubRepositories": { + "get": { + "operationId": "github-getGithubRepositories", + "tags": [ + "github" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "githubId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/github.getGithubBranches": { + "get": { + "operationId": "github-getGithubBranches", + "tags": [ + "github" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "repo", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "owner", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "githubId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/github.githubProviders": { + "get": { + "operationId": "github-githubProviders", + "tags": [ + "github" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/github.testConnection": { + "post": { + "operationId": "github-testConnection", + "tags": [ + "github" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "githubId": { + "type": "string" + } + }, + "required": [ + "githubId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/github.update": { + "post": { + "operationId": "github-update", + "tags": [ + "github" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "githubId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "gitProviderId": { + "type": "string" + }, + "githubAppName": { + "type": "string" + } + }, + "required": [ + "githubId", + "name", + "gitProviderId", + "githubAppName" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.create": { + "post": { + "operationId": "server-create", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "ipAddress": { + "type": "string" + }, + "port": { + "type": "number" + }, + "username": { + "type": "string" + }, + "sshKeyId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serverType": { + "type": "string", + "enum": [ + "deploy", + "build" + ] + } + }, + "required": [ + "name", + "description", + "ipAddress", + "port", + "username", + "sshKeyId", + "serverType" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.one": { + "get": { + "operationId": "server-one", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.getDefaultCommand": { + "get": { + "operationId": "server-getDefaultCommand", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.all": { + "get": { + "operationId": "server-all", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.count": { + "get": { + "operationId": "server-count", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.withSSHKey": { + "get": { + "operationId": "server-withSSHKey", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.buildServers": { + "get": { + "operationId": "server-buildServers", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.setup": { + "post": { + "operationId": "server-setup", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + }, + "required": [ + "serverId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.validate": { + "get": { + "operationId": "server-validate", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.security": { + "get": { + "operationId": "server-security", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.setupMonitoring": { + "post": { + "operationId": "server-setupMonitoring", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + }, + "metricsConfig": { + "type": "object", + "properties": { + "server": { + "type": "object", + "properties": { + "refreshRate": { + "type": "number" + }, + "port": { + "type": "number" + }, + "token": { + "type": "string" + }, + "urlCallback": { + "type": "string" + }, + "retentionDays": { + "type": "number" + }, + "cronJob": { + "type": "string" + }, + "thresholds": { + "type": "object", + "properties": { + "cpu": { + "type": "number" + }, + "memory": { + "type": "number" + } + }, + "required": [ + "cpu", + "memory" + ] + } + }, + "required": [ + "refreshRate", + "port", + "token", + "urlCallback", + "retentionDays", + "cronJob", + "thresholds" + ] + }, + "containers": { + "type": "object", + "properties": { + "refreshRate": { + "type": "number" + }, + "services": { + "type": "object", + "properties": { + "include": { + "type": "array", + "items": { + "type": "string" + } + }, + "exclude": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "required": [ + "refreshRate", + "services" + ] + } + }, + "required": [ + "server", + "containers" + ] + } + }, + "required": [ + "serverId", + "metricsConfig" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.remove": { + "post": { + "operationId": "server-remove", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + }, + "required": [ + "serverId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.update": { + "post": { + "operationId": "server-update", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serverId": { + "type": "string" + }, + "ipAddress": { + "type": "string" + }, + "port": { + "type": "number" + }, + "username": { + "type": "string" + }, + "sshKeyId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serverType": { + "type": "string", + "enum": [ + "deploy", + "build" + ] + }, + "command": { + "type": "string" + } + }, + "required": [ + "name", + "description", + "serverId", + "ipAddress", + "port", + "username", + "sshKeyId", + "serverType" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.publicIp": { + "get": { + "operationId": "server-publicIp", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.getServerTime": { + "get": { + "operationId": "server-getServerTime", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/server.getServerMetrics": { + "get": { + "operationId": "server-getServerMetrics", + "tags": [ + "server" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "url", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "token", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "dataPoints", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/stripe.getCurrentPlan": { + "get": { + "operationId": "stripe-getCurrentPlan", + "tags": [ + "stripe" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/stripe.getProducts": { + "get": { + "operationId": "stripe-getProducts", + "tags": [ + "stripe" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/stripe.createCheckoutSession": { + "post": { + "operationId": "stripe-createCheckoutSession", + "tags": [ + "stripe" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "tier": { + "type": "string", + "enum": [ + "legacy", + "hobby", + "startup" + ] + }, + "productId": { + "type": "string" + }, + "serverQuantity": { + "type": "number" + }, + "isAnnual": { + "type": "boolean" + } + }, + "required": [ + "tier", + "productId", + "serverQuantity", + "isAnnual" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/stripe.createCustomerPortalSession": { + "post": { + "operationId": "stripe-createCustomerPortalSession", + "tags": [ + "stripe" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/stripe.upgradeSubscription": { + "post": { + "operationId": "stripe-upgradeSubscription", + "tags": [ + "stripe" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "tier": { + "type": "string", + "enum": [ + "hobby", + "startup" + ] + }, + "serverQuantity": { + "type": "number" + }, + "isAnnual": { + "type": "boolean" + } + }, + "required": [ + "tier", + "serverQuantity", + "isAnnual" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/stripe.canCreateMoreServers": { + "get": { + "operationId": "stripe-canCreateMoreServers", + "tags": [ + "stripe" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/stripe.getInvoices": { + "get": { + "operationId": "stripe-getInvoices", + "tags": [ + "stripe" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/swarm.getNodes": { + "get": { + "operationId": "swarm-getNodes", + "tags": [ + "swarm" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/swarm.getNodeInfo": { + "get": { + "operationId": "swarm-getNodeInfo", + "tags": [ + "swarm" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "nodeId", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/swarm.getNodeApps": { + "get": { + "operationId": "swarm-getNodeApps", + "tags": [ + "swarm" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "serverId", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/ai.one": { + "get": { + "operationId": "ai-one", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "aiId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/ai.getModels": { + "get": { + "operationId": "ai-getModels", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "apiUrl", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "apiKey", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/ai.create": { + "post": { + "operationId": "ai-create", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "apiUrl": { + "type": "string" + }, + "apiKey": { + "type": "string" + }, + "model": { + "type": "string" + }, + "isEnabled": { + "type": "boolean" + } + }, + "required": [ + "name", + "apiUrl", + "apiKey", + "model", + "isEnabled" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/ai.update": { + "post": { + "operationId": "ai-update", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "aiId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "apiUrl": { + "type": "string" + }, + "apiKey": { + "type": "string" + }, + "model": { + "type": "string" + }, + "isEnabled": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + } + }, + "required": [ + "aiId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/ai.getAll": { + "get": { + "operationId": "ai-getAll", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/ai.get": { + "get": { + "operationId": "ai-get", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "aiId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/ai.delete": { + "post": { + "operationId": "ai-delete", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "aiId": { + "type": "string" + } + }, + "required": [ + "aiId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/ai.suggest": { + "post": { + "operationId": "ai-suggest", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "aiId": { + "type": "string" + }, + "input": { + "type": "string" + }, + "serverId": { + "type": "string" + } + }, + "required": [ + "aiId", + "input" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/ai.deploy": { + "post": { + "operationId": "ai-deploy", + "tags": [ + "ai" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "environmentId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "dockerCompose": { + "type": "string" + }, + "envVariables": { + "type": "string" + }, + "serverId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "domains": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "number" + }, + "serviceName": { + "type": "string" + } + }, + "required": [ + "host", + "port", + "serviceName" + ] + } + }, + "configFiles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "filePath": { + "type": "string" + }, + "content": { + "type": "string" + } + }, + "required": [ + "filePath", + "content" + ] + } + } + }, + "required": [ + "environmentId", + "id", + "dockerCompose", + "envVariables", + "name", + "description" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/organization.create": { + "post": { + "operationId": "organization-create", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "logo": { + "type": "string" + } + }, + "required": [ + "name" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/organization.all": { + "get": { + "operationId": "organization-all", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/organization.one": { + "get": { + "operationId": "organization-one", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "organizationId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/organization.update": { + "post": { + "operationId": "organization-update", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "organizationId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "logo": { + "type": "string" + } + }, + "required": [ + "organizationId", + "name" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/organization.delete": { + "post": { + "operationId": "organization-delete", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "organizationId": { + "type": "string" + } + }, + "required": [ + "organizationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/organization.allInvitations": { + "get": { + "operationId": "organization-allInvitations", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/organization.removeInvitation": { + "post": { + "operationId": "organization-removeInvitation", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "invitationId": { + "type": "string" + } + }, + "required": [ + "invitationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/organization.updateMemberRole": { + "post": { + "operationId": "organization-updateMemberRole", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "memberId": { + "type": "string" + }, + "role": { + "type": "string", + "enum": [ + "admin", + "member" + ] + } + }, + "required": [ + "memberId", + "role" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/organization.setDefault": { + "post": { + "operationId": "organization-setDefault", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "organizationId": { + "type": "string" + } + }, + "required": [ + "organizationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/organization.active": { + "get": { + "operationId": "organization-active", + "tags": [ + "organization" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/licenseKey.activate": { + "post": { + "operationId": "licenseKey-activate", + "tags": [ + "licenseKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "licenseKey": { + "type": "string" + } + }, + "required": [ + "licenseKey" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/licenseKey.validate": { + "post": { + "operationId": "licenseKey-validate", + "tags": [ + "licenseKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/licenseKey.deactivate": { + "post": { + "operationId": "licenseKey-deactivate", + "tags": [ + "licenseKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/licenseKey.getEnterpriseSettings": { + "get": { + "operationId": "licenseKey-getEnterpriseSettings", + "tags": [ + "licenseKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/licenseKey.haveValidLicenseKey": { + "get": { + "operationId": "licenseKey-haveValidLicenseKey", + "tags": [ + "licenseKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/licenseKey.updateEnterpriseSettings": { + "post": { + "operationId": "licenseKey-updateEnterpriseSettings", + "tags": [ + "licenseKey" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "enableEnterpriseFeatures": { + "type": "boolean" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sso.showSignInWithSSO": { + "get": { + "operationId": "sso-showSignInWithSSO", + "tags": [ + "sso" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sso.listProviders": { + "get": { + "operationId": "sso-listProviders", + "tags": [ + "sso" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sso.getTrustedOrigins": { + "get": { + "operationId": "sso-getTrustedOrigins", + "tags": [ + "sso" + ], + "security": [ + { + "Authorization": [] + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sso.one": { + "get": { + "operationId": "sso-one", + "tags": [ + "sso" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "providerId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sso.update": { + "post": { + "operationId": "sso-update", + "tags": [ + "sso" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "providerId": { + "type": "string" + }, + "issuer": { + "type": "string" + }, + "domains": { + "type": "array", + "items": { + "type": "string" + } + }, + "oidcConfig": { + "type": "object", + "properties": { + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "authorizationEndpoint": { + "type": "string" + }, + "tokenEndpoint": { + "type": "string" + }, + "userInfoEndpoint": { + "type": "string" + }, + "tokenEndpointAuthentication": { + "type": "string", + "enum": [ + "client_secret_post", + "client_secret_basic" + ] + }, + "jwksEndpoint": { + "type": "string" + }, + "discoveryEndpoint": { + "type": "string" + }, + "skipDiscovery": { + "type": "boolean" + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + } + }, + "pkce": { + "default": true, + "type": "boolean" + }, + "mapping": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "email": { + "type": "string" + }, + "emailVerified": { + "type": "string" + }, + "name": { + "type": "string" + }, + "image": { + "type": "string" + }, + "extraFields": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + } + }, + "required": [ + "id", + "email", + "name" + ] + } + }, + "required": [ + "clientId", + "clientSecret" + ] + }, + "samlConfig": { + "type": "object", + "properties": { + "entryPoint": { + "type": "string" + }, + "cert": { + "type": "string" + }, + "callbackUrl": { + "type": "string" + }, + "audience": { + "type": "string" + }, + "idpMetadata": { + "type": "object", + "properties": { + "metadata": { + "type": "string" + }, + "entityID": { + "type": "string" + }, + "cert": { + "type": "string" + }, + "privateKey": { + "type": "string" + }, + "privateKeyPass": { + "type": "string" + }, + "isAssertionEncrypted": { + "type": "boolean" + }, + "encPrivateKey": { + "type": "string" + }, + "encPrivateKeyPass": { + "type": "string" + }, + "singleSignOnService": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Binding": { + "type": "string" + }, + "Location": { + "type": "string" + } + }, + "required": [ + "Binding", + "Location" + ] + } + } + } + }, + "spMetadata": { + "type": "object", + "properties": { + "metadata": { + "type": "string" + }, + "entityID": { + "type": "string" + }, + "binding": { + "type": "string" + }, + "privateKey": { + "type": "string" + }, + "privateKeyPass": { + "type": "string" + }, + "isAssertionEncrypted": { + "type": "boolean" + }, + "encPrivateKey": { + "type": "string" + }, + "encPrivateKeyPass": { + "type": "string" + } + } + }, + "wantAssertionsSigned": { + "type": "boolean" + }, + "authnRequestsSigned": { + "type": "boolean" + }, + "signatureAlgorithm": { + "type": "string" + }, + "digestAlgorithm": { + "type": "string" + }, + "identifierFormat": { + "type": "string" + }, + "privateKey": { + "type": "string" + }, + "decryptionPvk": { + "type": "string" + }, + "additionalParams": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + }, + "mapping": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "email": { + "type": "string" + }, + "emailVerified": { + "type": "string" + }, + "name": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "extraFields": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + } + }, + "required": [ + "id", + "email", + "name" + ] + } + }, + "required": [ + "entryPoint", + "cert", + "callbackUrl", + "spMetadata" + ] + }, + "organizationId": { + "type": "string" + }, + "overrideUserInfo": { + "default": false, + "type": "boolean" + } + }, + "required": [ + "providerId", + "issuer", + "domains" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sso.deleteProvider": { + "post": { + "operationId": "sso-deleteProvider", + "tags": [ + "sso" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "providerId": { + "type": "string" + } + }, + "required": [ + "providerId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sso.register": { + "post": { + "operationId": "sso-register", + "tags": [ + "sso" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "providerId": { + "type": "string" + }, + "issuer": { + "type": "string" + }, + "domains": { + "type": "array", + "items": { + "type": "string" + } + }, + "oidcConfig": { + "type": "object", + "properties": { + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "authorizationEndpoint": { + "type": "string" + }, + "tokenEndpoint": { + "type": "string" + }, + "userInfoEndpoint": { + "type": "string" + }, + "tokenEndpointAuthentication": { + "type": "string", + "enum": [ + "client_secret_post", + "client_secret_basic" + ] + }, + "jwksEndpoint": { + "type": "string" + }, + "discoveryEndpoint": { + "type": "string" + }, + "skipDiscovery": { + "type": "boolean" + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + } + }, + "pkce": { + "default": true, + "type": "boolean" + }, + "mapping": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "email": { + "type": "string" + }, + "emailVerified": { + "type": "string" + }, + "name": { + "type": "string" + }, + "image": { + "type": "string" + }, + "extraFields": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + } + }, + "required": [ + "id", + "email", + "name" + ] + } + }, + "required": [ + "clientId", + "clientSecret" + ] + }, + "samlConfig": { + "type": "object", + "properties": { + "entryPoint": { + "type": "string" + }, + "cert": { + "type": "string" + }, + "callbackUrl": { + "type": "string" + }, + "audience": { + "type": "string" + }, + "idpMetadata": { + "type": "object", + "properties": { + "metadata": { + "type": "string" + }, + "entityID": { + "type": "string" + }, + "cert": { + "type": "string" + }, + "privateKey": { + "type": "string" + }, + "privateKeyPass": { + "type": "string" + }, + "isAssertionEncrypted": { + "type": "boolean" + }, + "encPrivateKey": { + "type": "string" + }, + "encPrivateKeyPass": { + "type": "string" + }, + "singleSignOnService": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Binding": { + "type": "string" + }, + "Location": { + "type": "string" + } + }, + "required": [ + "Binding", + "Location" + ] + } + } + } + }, + "spMetadata": { + "type": "object", + "properties": { + "metadata": { + "type": "string" + }, + "entityID": { + "type": "string" + }, + "binding": { + "type": "string" + }, + "privateKey": { + "type": "string" + }, + "privateKeyPass": { + "type": "string" + }, + "isAssertionEncrypted": { + "type": "boolean" + }, + "encPrivateKey": { + "type": "string" + }, + "encPrivateKeyPass": { + "type": "string" + } + } + }, + "wantAssertionsSigned": { + "type": "boolean" + }, + "authnRequestsSigned": { + "type": "boolean" + }, + "signatureAlgorithm": { + "type": "string" + }, + "digestAlgorithm": { + "type": "string" + }, + "identifierFormat": { + "type": "string" + }, + "privateKey": { + "type": "string" + }, + "decryptionPvk": { + "type": "string" + }, + "additionalParams": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + }, + "mapping": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "email": { + "type": "string" + }, + "emailVerified": { + "type": "string" + }, + "name": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "extraFields": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + } + }, + "required": [ + "id", + "email", + "name" + ] + } + }, + "required": [ + "entryPoint", + "cert", + "callbackUrl", + "spMetadata" + ] + }, + "organizationId": { + "type": "string" + }, + "overrideUserInfo": { + "default": false, + "type": "boolean" + } + }, + "required": [ + "providerId", + "issuer", + "domains" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sso.addTrustedOrigin": { + "post": { + "operationId": "sso-addTrustedOrigin", + "tags": [ + "sso" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "origin": { + "type": "string" + } + }, + "required": [ + "origin" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sso.removeTrustedOrigin": { + "post": { + "operationId": "sso-removeTrustedOrigin", + "tags": [ + "sso" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "origin": { + "type": "string" + } + }, + "required": [ + "origin" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/sso.updateTrustedOrigin": { + "post": { + "operationId": "sso-updateTrustedOrigin", + "tags": [ + "sso" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "oldOrigin": { + "type": "string" + }, + "newOrigin": { + "type": "string" + } + }, + "required": [ + "oldOrigin", + "newOrigin" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/schedule.create": { + "post": { + "operationId": "schedule-create", + "tags": [ + "schedule" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "scheduleId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "cronExpression": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "serviceName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "shellType": { + "type": "string", + "enum": [ + "bash", + "sh" + ] + }, + "scheduleType": { + "type": "string", + "enum": [ + "application", + "compose", + "server", + "dokploy-server" + ] + }, + "command": { + "type": "string" + }, + "script": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "applicationId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "composeId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serverId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "userId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "enabled": { + "type": "boolean" + }, + "timezone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "createdAt": { + "type": "string" + } + }, + "required": [ + "name", + "cronExpression", + "command" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/schedule.update": { + "post": { + "operationId": "schedule-update", + "tags": [ + "schedule" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "scheduleId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "cronExpression": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "serviceName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "shellType": { + "type": "string", + "enum": [ + "bash", + "sh" + ] + }, + "scheduleType": { + "type": "string", + "enum": [ + "application", + "compose", + "server", + "dokploy-server" + ] + }, + "command": { + "type": "string" + }, + "script": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "applicationId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "composeId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "serverId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "userId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "enabled": { + "type": "boolean" + }, + "timezone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "createdAt": { + "type": "string" + } + }, + "required": [ + "scheduleId", + "name", + "cronExpression", + "command" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/schedule.delete": { + "post": { + "operationId": "schedule-delete", + "tags": [ + "schedule" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "scheduleId": { + "type": "string" + } + }, + "required": [ + "scheduleId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/schedule.list": { + "get": { + "operationId": "schedule-list", + "tags": [ + "schedule" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "scheduleType", + "schema": { + "type": "string", + "enum": [ + "application", + "compose", + "server", + "dokploy-server" + ] + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/schedule.one": { + "get": { + "operationId": "schedule-one", + "tags": [ + "schedule" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "scheduleId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/schedule.runManually": { + "post": { + "operationId": "schedule-runManually", + "tags": [ + "schedule" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "scheduleId": { + "type": "string" + } + }, + "required": [ + "scheduleId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/rollback.delete": { + "post": { + "operationId": "rollback-delete", + "tags": [ + "rollback" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "rollbackId": { + "type": "string" + } + }, + "required": [ + "rollbackId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/rollback.rollback": { + "post": { + "operationId": "rollback-rollback", + "tags": [ + "rollback" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "rollbackId": { + "type": "string" + } + }, + "required": [ + "rollbackId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/volumeBackups.list": { + "get": { + "operationId": "volumeBackups-list", + "tags": [ + "volumeBackups" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "volumeBackupType", + "schema": { + "type": "string", + "enum": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose" + ] + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/volumeBackups.create": { + "post": { + "operationId": "volumeBackups-create", + "tags": [ + "volumeBackups" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "volumeName": { + "type": "string" + }, + "prefix": { + "type": "string" + }, + "serviceType": { + "type": "string", + "enum": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose" + ] + }, + "appName": { + "type": "string" + }, + "serviceName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "turnOff": { + "type": "boolean" + }, + "cronExpression": { + "type": "string" + }, + "keepLatestCount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "applicationId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "postgresId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mariadbId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mongoId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mysqlId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "redisId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "composeId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "createdAt": { + "type": "string" + }, + "destinationId": { + "type": "string" + } + }, + "required": [ + "name", + "volumeName", + "prefix", + "cronExpression", + "destinationId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/volumeBackups.one": { + "get": { + "operationId": "volumeBackups-one", + "tags": [ + "volumeBackups" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "volumeBackupId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/volumeBackups.delete": { + "post": { + "operationId": "volumeBackups-delete", + "tags": [ + "volumeBackups" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "volumeBackupId": { + "type": "string" + } + }, + "required": [ + "volumeBackupId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/volumeBackups.update": { + "post": { + "operationId": "volumeBackups-update", + "tags": [ + "volumeBackups" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "volumeName": { + "type": "string" + }, + "prefix": { + "type": "string" + }, + "serviceType": { + "type": "string", + "enum": [ + "application", + "postgres", + "mysql", + "mariadb", + "mongo", + "redis", + "compose" + ] + }, + "appName": { + "type": "string" + }, + "serviceName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "turnOff": { + "type": "boolean" + }, + "cronExpression": { + "type": "string" + }, + "keepLatestCount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "applicationId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "postgresId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mariadbId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mongoId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mysqlId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "redisId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "composeId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "createdAt": { + "type": "string" + }, + "destinationId": { + "type": "string" + }, + "volumeBackupId": { + "type": "string" + } + }, + "required": [ + "name", + "volumeName", + "prefix", + "cronExpression", + "destinationId", + "volumeBackupId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/volumeBackups.runManually": { + "post": { + "operationId": "volumeBackups-runManually", + "tags": [ + "volumeBackups" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "volumeBackupId": { + "type": "string" + } + }, + "required": [ + "volumeBackupId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/environment.create": { + "post": { + "operationId": "environment-create", + "tags": [ + "environment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "projectId": { + "type": "string" + } + }, + "required": [ + "name", + "projectId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/environment.one": { + "get": { + "operationId": "environment-one", + "tags": [ + "environment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "environmentId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/environment.byProjectId": { + "get": { + "operationId": "environment-byProjectId", + "tags": [ + "environment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "projectId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/environment.remove": { + "post": { + "operationId": "environment-remove", + "tags": [ + "environment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "environmentId": { + "type": "string" + } + }, + "required": [ + "environmentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/environment.update": { + "post": { + "operationId": "environment-update", + "tags": [ + "environment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "environmentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "env": { + "type": "string" + } + }, + "required": [ + "environmentId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/environment.duplicate": { + "post": { + "operationId": "environment-duplicate", + "tags": [ + "environment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "environmentId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "required": [ + "environmentId", + "name" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/environment.search": { + "get": { + "operationId": "environment-search", + "tags": [ + "environment" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "name", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "description", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "projectId", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "limit", + "schema": { + "default": 20, + "type": "number" + } + }, + { + "in": "query", + "name": "offset", + "schema": { + "default": 0, + "type": "number" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/patch.create": { + "post": { + "operationId": "patch-create", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "filePath": { + "type": "string" + }, + "content": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "create", + "update", + "delete" + ] + }, + "enabled": { + "type": "boolean" + }, + "applicationId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "composeId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "filePath", + "content" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/patch.one": { + "get": { + "operationId": "patch-one", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "patchId", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/patch.byEntityId": { + "get": { + "operationId": "patch-byEntityId", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "type", + "schema": { + "type": "string", + "enum": [ + "application", + "compose" + ] + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/patch.update": { + "post": { + "operationId": "patch-update", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "patchId": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "create", + "update", + "delete" + ] + }, + "filePath": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "content": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "patchId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/patch.delete": { + "post": { + "operationId": "patch-delete", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "patchId": { + "type": "string" + } + }, + "required": [ + "patchId" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/patch.toggleEnabled": { + "post": { + "operationId": "patch-toggleEnabled", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "patchId": { + "type": "string" + }, + "enabled": { + "type": "boolean" + } + }, + "required": [ + "patchId", + "enabled" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/patch.ensureRepo": { + "post": { + "operationId": "patch-ensureRepo", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "application", + "compose" + ] + } + }, + "required": [ + "id", + "type" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/patch.readRepoDirectories": { + "get": { + "operationId": "patch-readRepoDirectories", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "type", + "schema": { + "type": "string", + "enum": [ + "application", + "compose" + ] + }, + "required": true + }, + { + "in": "query", + "name": "repoPath", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/patch.readRepoFile": { + "get": { + "operationId": "patch-readRepoFile", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "string" + }, + "required": true + }, + { + "in": "query", + "name": "type", + "schema": { + "type": "string", + "enum": [ + "application", + "compose" + ] + }, + "required": true + }, + { + "in": "query", + "name": "filePath", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.NOT_FOUND" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/patch.saveFileAsPatch": { + "post": { + "operationId": "patch-saveFileAsPatch", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "application", + "compose" + ] + }, + "filePath": { + "type": "string" + }, + "content": { + "type": "string" + }, + "patchType": { + "default": "update", + "type": "string", + "enum": [ + "create", + "update" + ] + } + }, + "required": [ + "id", + "type", + "filePath", + "content" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/patch.markFileForDeletion": { + "post": { + "operationId": "patch-markFileForDeletion", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "application", + "compose" + ] + }, + "filePath": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "filePath" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + }, + "/patch.cleanPatchRepos": { + "post": { + "operationId": "patch-cleanPatchRepos", + "tags": [ + "patch" + ], + "security": [ + { + "Authorization": [] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "serverId": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Invalid input data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.BAD_REQUEST" + } + } + } + }, + "401": { + "description": "Authorization not provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.UNAUTHORIZED" + } + } + } + }, + "403": { + "description": "Insufficient access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.FORBIDDEN" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "error.BAD_REQUEST": { + "title": "Invalid input data error (400)", + "description": "The error information", + "example": { + "code": "BAD_REQUEST", + "message": "Invalid input data", + "issues": [] + }, + "type": "object", + "properties": { + "message": { + "description": "The error message", + "example": "Invalid input data", + "type": "string" + }, + "code": { + "description": "The error code", + "example": "BAD_REQUEST", + "type": "string" + }, + "issues": { + "description": "An array of issues that were responsible for the error", + "example": [], + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "additionalProperties": false + } + } + }, + "required": [ + "message", + "code" + ], + "additionalProperties": false + }, + "error.UNAUTHORIZED": { + "title": "Authorization not provided error (401)", + "description": "The error information", + "example": { + "code": "UNAUTHORIZED", + "message": "Authorization not provided", + "issues": [] + }, + "type": "object", + "properties": { + "message": { + "description": "The error message", + "example": "Authorization not provided", + "type": "string" + }, + "code": { + "description": "The error code", + "example": "UNAUTHORIZED", + "type": "string" + }, + "issues": { + "description": "An array of issues that were responsible for the error", + "example": [], + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "additionalProperties": false + } + } + }, + "required": [ + "message", + "code" + ], + "additionalProperties": false + }, + "error.FORBIDDEN": { + "title": "Insufficient access error (403)", + "description": "The error information", + "example": { + "code": "FORBIDDEN", + "message": "Insufficient access", + "issues": [] + }, + "type": "object", + "properties": { + "message": { + "description": "The error message", + "example": "Insufficient access", + "type": "string" + }, + "code": { + "description": "The error code", + "example": "FORBIDDEN", + "type": "string" + }, + "issues": { + "description": "An array of issues that were responsible for the error", + "example": [], + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "additionalProperties": false + } + } + }, + "required": [ + "message", + "code" + ], + "additionalProperties": false + }, + "error.INTERNAL_SERVER_ERROR": { + "title": "Internal server error error (500)", + "description": "The error information", + "example": { + "code": "INTERNAL_SERVER_ERROR", + "message": "Internal server error", + "issues": [] + }, + "type": "object", + "properties": { + "message": { + "description": "The error message", + "example": "Internal server error", + "type": "string" + }, + "code": { + "description": "The error code", + "example": "INTERNAL_SERVER_ERROR", + "type": "string" + }, + "issues": { + "description": "An array of issues that were responsible for the error", + "example": [], + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "additionalProperties": false + } + } + }, + "required": [ + "message", + "code" + ], + "additionalProperties": false + }, + "error.NOT_FOUND": { + "title": "Not found error (404)", + "description": "The error information", + "example": { + "code": "NOT_FOUND", + "message": "Not found", + "issues": [] + }, + "type": "object", + "properties": { + "message": { + "description": "The error message", + "example": "Not found", + "type": "string" + }, + "code": { + "description": "The error code", + "example": "NOT_FOUND", + "type": "string" + }, + "issues": { + "description": "An array of issues that were responsible for the error", + "example": [], + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "additionalProperties": false + } + } + }, + "required": [ + "message", + "code" + ], + "additionalProperties": false + } + }, + "securitySchemes": { + "apiKey": { + "type": "apiKey", + "in": "header", + "name": "x-api-key", + "description": "API key authentication. Generate an API key from your Dokploy dashboard under Settings > API Keys." + } + } + }, + "security": [ + { + "apiKey": [] + } + ] +} diff --git a/package.json b/package.json index d2f3cd8..4d2239e 100644 --- a/package.json +++ b/package.json @@ -1,88 +1,59 @@ { "name": "@dokploy/cli", "description": "A CLI to manage dokploy server remotely", - "version": "v0.2.8", + "version": "0.3.0", "author": "Mauricio Siu", - "licenses": [{ - "type": "MIT", - "url": "https://github.com/Dokploy/cli/blob/master/LICENSE" - }], + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/Dokploy/cli/blob/master/LICENSE" + } + ], "publishConfig": { "access": "public" }, "bin": { - "dokploy": "./bin/run.js" + "dokploy": "./dist/index.js" }, "bugs": "https://github.com/Dokploy/cli/issues", "dependencies": { - "@oclif/core": "^3", - "@oclif/plugin-help": "^6", - "@oclif/plugin-plugins": "^5", "axios": "^1.7.2", "chalk": "^5.3.0", - "cli-table3": "^0.6.5", - "inquirer": "^9.2.23", - "slugify": "^1.6.6", - "superjson": "^2.2.1" + "commander": "^13.1.0" }, "devDependencies": { - "@oclif/prettier-config": "^0.2.1", - "@oclif/test": "^4", - "@types/chai": "^4", - "@types/inquirer": "9.0.7", - "@types/mocha": "^10", + "@biomejs/biome": "2.1.1", "@types/node": "^18", - "chai": "^4", - "eslint": "^8", - "eslint-config-oclif": "^5", - "eslint-config-oclif-typescript": "^3", - "eslint-config-prettier": "^9", - "mocha": "^10", - "oclif": "^4", - "shx": "^0.3.3", - "ts-node": "^10", - "typescript": "^5" + "tsx": "^4.21.0", + "typescript": "^5", + "vitest": "^4.1.4" }, "engines": { "node": ">=18.0.0" }, "files": [ - "/bin", - "/dist", - "/oclif.manifest.json" + "/dist" ], "homepage": "https://github.com/Dokploy/cli", "keywords": [ - "oclif" + "dokploy", + "cli" ], "license": "MIT", "main": "dist/index.js", "type": "module", - "oclif": { - "bin": "dokploy", - "dirname": "dokploy", - "commands": "./dist/commands", - "plugins": [ - "@oclif/plugin-help", - "@oclif/plugin-plugins" - ], - "topicSeparator": " ", - "topics": { - "hello": { - "description": "Say hello to the world and others" - } - } - }, "repository": "Dokploy/cli", "scripts": { - "build": "shx rm -rf dist && tsc -b", - "lint": "eslint . --ext .ts", - "postpack": "shx rm -f oclif.manifest.json", - "posttest": "pnpm run lint", - "prepack": "oclif manifest && oclif readme", - "test": "mocha --forbid-only \"test/**/*.test.ts\"", - "version": "oclif readme && git add README.md", - "publish" :"npm publish" + "build": "tsc -b", + "generate": "tsx scripts/generate.ts", + "prebuild": "pnpm run generate", + "dev": "tsx src/index.ts", + "lint": "biome check --write .", + "test": "vitest run", + "publish": "npm publish" }, - "types": "dist/index.d.ts" + "types": "dist/index.d.ts", + "pnpm": { + "onlyBuiltDependencies": ["esbuild"] + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b48de68..9f0dfec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,5309 +1,1383 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@oclif/core': - specifier: ^3 - version: 3.26.9 - '@oclif/plugin-help': - specifier: ^6 - version: 6.1.0(typescript@5.4.5) - '@oclif/plugin-plugins': - specifier: ^5 - version: 5.2.1(typescript@5.4.5) - axios: - specifier: ^1.7.2 - version: 1.7.2 - chalk: - specifier: ^5.3.0 - version: 5.3.0 - cli-table3: - specifier: ^0.6.5 - version: 0.6.5 - inquirer: - specifier: ^9.2.23 - version: 9.2.23 - slugify: - specifier: ^1.6.6 - version: 1.6.6 - superjson: - specifier: ^2.2.1 - version: 2.2.1 - -devDependencies: - '@oclif/prettier-config': - specifier: ^0.2.1 - version: 0.2.1 - '@oclif/test': - specifier: ^4 - version: 4.0.3(@oclif/core@3.26.9) - '@types/chai': - specifier: ^4 - version: 4.3.16 - '@types/inquirer': - specifier: 9.0.7 - version: 9.0.7 - '@types/mocha': - specifier: ^10 - version: 10.0.6 - '@types/node': - specifier: ^18 - version: 18.19.34 - chai: - specifier: ^4 - version: 4.4.1 - eslint: - specifier: ^8 - version: 8.57.0 - eslint-config-oclif: - specifier: ^5 - version: 5.2.0(eslint@8.57.0) - eslint-config-oclif-typescript: - specifier: ^3 - version: 3.1.7(eslint@8.57.0)(typescript@5.4.5) - eslint-config-prettier: - specifier: ^9 - version: 9.1.0(eslint@8.57.0) - mocha: - specifier: ^10 - version: 10.4.0 - oclif: - specifier: ^4 - version: 4.12.3(typescript@5.4.5) - shx: - specifier: ^0.3.3 - version: 0.3.4 - ts-node: - specifier: ^10 - version: 10.9.2(@types/node@18.19.34)(typescript@5.4.5) - typescript: - specifier: ^5 - version: 5.4.5 - -packages: - - /@aws-crypto/crc32@3.0.0: - resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} - dependencies: - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.577.0 - tslib: 1.14.1 - dev: true - - /@aws-crypto/crc32c@3.0.0: - resolution: {integrity: sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==} - dependencies: - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.577.0 - tslib: 1.14.1 - dev: true - - /@aws-crypto/ie11-detection@3.0.0: - resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} - dependencies: - tslib: 1.14.1 - dev: true - - /@aws-crypto/sha1-browser@3.0.0: - resolution: {integrity: sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==} - dependencies: - '@aws-crypto/ie11-detection': 3.0.0 - '@aws-crypto/supports-web-crypto': 3.0.0 - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-locate-window': 3.568.0 - '@aws-sdk/util-utf8-browser': 3.259.0 - tslib: 1.14.1 - dev: true - - /@aws-crypto/sha256-browser@3.0.0: - resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} - dependencies: - '@aws-crypto/ie11-detection': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-crypto/supports-web-crypto': 3.0.0 - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-locate-window': 3.568.0 - '@aws-sdk/util-utf8-browser': 3.259.0 - tslib: 1.14.1 - dev: true - - /@aws-crypto/sha256-js@3.0.0: - resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} - dependencies: - '@aws-crypto/util': 3.0.0 - '@aws-sdk/types': 3.577.0 - tslib: 1.14.1 - dev: true - - /@aws-crypto/supports-web-crypto@3.0.0: - resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} - dependencies: - tslib: 1.14.1 - dev: true - - /@aws-crypto/util@3.0.0: - resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} - dependencies: - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-utf8-browser': 3.259.0 - tslib: 1.14.1 - dev: true - - /@aws-sdk/client-cloudfront@3.588.0: - resolution: {integrity: sha512-C9qik7uz1jfjXwhLzwSO2uy5Ze/IkuuMuqcFyjXNnRgpXv1TC0Buv2r1JyYYxnpxV4YvLWk/+kG5UCv1p2jjxw==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/client-sts': 3.588.0 - '@aws-sdk/core': 3.588.0 - '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0)(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 - '@aws-sdk/xml-builder': 3.575.0 - '@smithy/config-resolver': 3.0.1 - '@smithy/core': 2.1.1 - '@smithy/fetch-http-handler': 3.0.1 - '@smithy/hash-node': 3.0.0 - '@smithy/invalid-dependency': 3.0.0 - '@smithy/middleware-content-length': 3.0.0 - '@smithy/middleware-endpoint': 3.0.1 - '@smithy/middleware-retry': 3.0.3 - '@smithy/middleware-serde': 3.0.0 - '@smithy/middleware-stack': 3.0.0 - '@smithy/node-config-provider': 3.1.0 - '@smithy/node-http-handler': 3.0.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/smithy-client': 3.1.1 - '@smithy/types': 3.0.0 - '@smithy/url-parser': 3.0.0 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.3 - '@smithy/util-defaults-mode-node': 3.0.3 - '@smithy/util-endpoints': 2.0.1 - '@smithy/util-middleware': 3.0.0 - '@smithy/util-retry': 3.0.0 - '@smithy/util-stream': 3.0.1 - '@smithy/util-utf8': 3.0.0 - '@smithy/util-waiter': 3.0.0 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - dev: true - - /@aws-sdk/client-s3@3.588.0: - resolution: {integrity: sha512-MyJs3sbgRtVOdT2xxdg/CmLk+t+dMg26nfEZucBFeJKFAHfTA74sjef9y+GQ2xFUNq+kqG1CnP8JGMiGx2ht0w==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-crypto/sha1-browser': 3.0.0 - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/client-sts': 3.588.0 - '@aws-sdk/core': 3.588.0 - '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0)(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/middleware-bucket-endpoint': 3.587.0 - '@aws-sdk/middleware-expect-continue': 3.577.0 - '@aws-sdk/middleware-flexible-checksums': 3.587.0 - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-location-constraint': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-sdk-s3': 3.587.0 - '@aws-sdk/middleware-signing': 3.587.0 - '@aws-sdk/middleware-ssec': 3.577.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/signature-v4-multi-region': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 - '@aws-sdk/xml-builder': 3.575.0 - '@smithy/config-resolver': 3.0.1 - '@smithy/core': 2.1.1 - '@smithy/eventstream-serde-browser': 3.0.0 - '@smithy/eventstream-serde-config-resolver': 3.0.0 - '@smithy/eventstream-serde-node': 3.0.0 - '@smithy/fetch-http-handler': 3.0.1 - '@smithy/hash-blob-browser': 3.0.0 - '@smithy/hash-node': 3.0.0 - '@smithy/hash-stream-node': 3.0.0 - '@smithy/invalid-dependency': 3.0.0 - '@smithy/md5-js': 3.0.0 - '@smithy/middleware-content-length': 3.0.0 - '@smithy/middleware-endpoint': 3.0.1 - '@smithy/middleware-retry': 3.0.3 - '@smithy/middleware-serde': 3.0.0 - '@smithy/middleware-stack': 3.0.0 - '@smithy/node-config-provider': 3.1.0 - '@smithy/node-http-handler': 3.0.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/smithy-client': 3.1.1 - '@smithy/types': 3.0.0 - '@smithy/url-parser': 3.0.0 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.3 - '@smithy/util-defaults-mode-node': 3.0.3 - '@smithy/util-endpoints': 2.0.1 - '@smithy/util-retry': 3.0.0 - '@smithy/util-stream': 3.0.1 - '@smithy/util-utf8': 3.0.0 - '@smithy/util-waiter': 3.0.0 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - dev: true - - /@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0): - resolution: {integrity: sha512-CTbgtLSg0y2jIOtESuQKkRIqRe/FQmKuyzFWc+Qy6yGcbk1Pyusfz2BC+GGwpYU+1BlBBSNnLQHpx3XY87+aSA==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.588.0 - '@aws-sdk/core': 3.588.0 - '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0)(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 - '@smithy/config-resolver': 3.0.1 - '@smithy/core': 2.1.1 - '@smithy/fetch-http-handler': 3.0.1 - '@smithy/hash-node': 3.0.0 - '@smithy/invalid-dependency': 3.0.0 - '@smithy/middleware-content-length': 3.0.0 - '@smithy/middleware-endpoint': 3.0.1 - '@smithy/middleware-retry': 3.0.3 - '@smithy/middleware-serde': 3.0.0 - '@smithy/middleware-stack': 3.0.0 - '@smithy/node-config-provider': 3.1.0 - '@smithy/node-http-handler': 3.0.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/smithy-client': 3.1.1 - '@smithy/types': 3.0.0 - '@smithy/url-parser': 3.0.0 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.3 - '@smithy/util-defaults-mode-node': 3.0.3 - '@smithy/util-endpoints': 2.0.1 - '@smithy/util-middleware': 3.0.0 - '@smithy/util-retry': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.2 - transitivePeerDependencies: - - '@aws-sdk/client-sts' - - aws-crt - dev: true - - /@aws-sdk/client-sso@3.588.0: - resolution: {integrity: sha512-zKS+xUkBLfwjbh77ZjtRUoG/vR/fyDteSE6rOAzwlmHQL8p+QUX+zNUNvCInvPi62zGBhEwXOvzs8zvnT4NzfQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/core': 3.588.0 - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 - '@smithy/config-resolver': 3.0.1 - '@smithy/core': 2.1.1 - '@smithy/fetch-http-handler': 3.0.1 - '@smithy/hash-node': 3.0.0 - '@smithy/invalid-dependency': 3.0.0 - '@smithy/middleware-content-length': 3.0.0 - '@smithy/middleware-endpoint': 3.0.1 - '@smithy/middleware-retry': 3.0.3 - '@smithy/middleware-serde': 3.0.0 - '@smithy/middleware-stack': 3.0.0 - '@smithy/node-config-provider': 3.1.0 - '@smithy/node-http-handler': 3.0.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/smithy-client': 3.1.1 - '@smithy/types': 3.0.0 - '@smithy/url-parser': 3.0.0 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.3 - '@smithy/util-defaults-mode-node': 3.0.3 - '@smithy/util-endpoints': 2.0.1 - '@smithy/util-middleware': 3.0.0 - '@smithy/util-retry': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - dev: true - - /@aws-sdk/client-sts@3.588.0: - resolution: {integrity: sha512-UIMjcUikgG9NIENQxSyJNTHMD8TaTfK6Jjf1iuZSyQRyTrcGy0/xcDxrmwZQFAPkOPUf6w9KqydLkMLcYOBdPQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/core': 3.588.0 - '@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0)(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-user-agent': 3.587.0 - '@aws-sdk/region-config-resolver': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.587.0 - '@smithy/config-resolver': 3.0.1 - '@smithy/core': 2.1.1 - '@smithy/fetch-http-handler': 3.0.1 - '@smithy/hash-node': 3.0.0 - '@smithy/invalid-dependency': 3.0.0 - '@smithy/middleware-content-length': 3.0.0 - '@smithy/middleware-endpoint': 3.0.1 - '@smithy/middleware-retry': 3.0.3 - '@smithy/middleware-serde': 3.0.0 - '@smithy/middleware-stack': 3.0.0 - '@smithy/node-config-provider': 3.1.0 - '@smithy/node-http-handler': 3.0.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/smithy-client': 3.1.1 - '@smithy/types': 3.0.0 - '@smithy/url-parser': 3.0.0 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.3 - '@smithy/util-defaults-mode-node': 3.0.3 - '@smithy/util-endpoints': 2.0.1 - '@smithy/util-middleware': 3.0.0 - '@smithy/util-retry': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - dev: true - - /@aws-sdk/core@3.588.0: - resolution: {integrity: sha512-O1c2+9ce46Z+iiid+W3iC1IvPbfIo5ev9CBi54GdNB9SaI8/3+f8MJcux0D6c9toCF0ArMersN/gp8ek57e9uQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/core': 2.1.1 - '@smithy/protocol-http': 4.0.0 - '@smithy/signature-v4': 3.0.0 - '@smithy/smithy-client': 3.1.1 - '@smithy/types': 3.0.0 - fast-xml-parser: 4.2.5 - tslib: 2.6.2 - dev: true - - /@aws-sdk/credential-provider-env@3.587.0: - resolution: {integrity: sha512-Hyg/5KFECIk2k5o8wnVEiniV86yVkhn5kzITUydmNGCkXdBFHMHRx6hleQ1bqwJHbBskyu8nbYamzcwymmGwmw==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@smithy/property-provider': 3.1.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/credential-provider-http@3.587.0: - resolution: {integrity: sha512-Su1SRWVRCuR1e32oxX3C1V4c5hpPN20WYcRfdcr2wXwHqSvys5DrnmuCC+JoEnS/zt3adUJhPliTqpfKgSdMrA==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@smithy/fetch-http-handler': 3.0.1 - '@smithy/node-http-handler': 3.0.0 - '@smithy/property-provider': 3.1.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/smithy-client': 3.1.1 - '@smithy/types': 3.0.0 - '@smithy/util-stream': 3.0.1 - tslib: 2.6.2 - dev: true - - /@aws-sdk/credential-provider-ini@3.588.0(@aws-sdk/client-sso-oidc@3.588.0)(@aws-sdk/client-sts@3.588.0): - resolution: {integrity: sha512-tP/YmEKvYpmp7pCR2OuhoOhAOtm6BbZ1hbeG9Sw9RFZi55dbGPHqMmfvvzHFAGsJ20z4/oDS+UnHaWVhRnV82w==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@aws-sdk/client-sts': ^3.588.0 - dependencies: - '@aws-sdk/client-sts': 3.588.0 - '@aws-sdk/credential-provider-env': 3.587.0 - '@aws-sdk/credential-provider-http': 3.587.0 - '@aws-sdk/credential-provider-process': 3.587.0 - '@aws-sdk/credential-provider-sso': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0) - '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/types': 3.577.0 - '@smithy/credential-provider-imds': 3.1.0 - '@smithy/property-provider': 3.1.0 - '@smithy/shared-ini-file-loader': 3.1.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - dev: true - - /@aws-sdk/credential-provider-node@3.588.0(@aws-sdk/client-sso-oidc@3.588.0)(@aws-sdk/client-sts@3.588.0): - resolution: {integrity: sha512-8s4Ruo6q1YIrj8AZKBiUQG42051ytochDMSqdVOEZGxskfvmt2XALyi5SsWd0Ve3zR95zi+EtRBNPn2EU8sQpA==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/credential-provider-env': 3.587.0 - '@aws-sdk/credential-provider-http': 3.587.0 - '@aws-sdk/credential-provider-ini': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0)(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/credential-provider-process': 3.587.0 - '@aws-sdk/credential-provider-sso': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0) - '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/types': 3.577.0 - '@smithy/credential-provider-imds': 3.1.0 - '@smithy/property-provider': 3.1.0 - '@smithy/shared-ini-file-loader': 3.1.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - '@aws-sdk/client-sts' - - aws-crt - dev: true - - /@aws-sdk/credential-provider-process@3.587.0: - resolution: {integrity: sha512-V4xT3iCqkF8uL6QC4gqBJg/2asd/damswP1h9HCfqTllmPWzImS+8WD3VjgTLw5b0KbTy+ZdUhKc0wDnyzkzxg==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@smithy/property-provider': 3.1.0 - '@smithy/shared-ini-file-loader': 3.1.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/credential-provider-sso@3.588.0(@aws-sdk/client-sso-oidc@3.588.0): - resolution: {integrity: sha512-1GstMCyFzenVeppK7hWazMvo3P1DXKP70XkXAjH8H2ELBVg5X8Zt043cnQ7CMt4XjCV+ettHAtc9kz/gJTkDNQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/client-sso': 3.588.0 - '@aws-sdk/token-providers': 3.587.0(@aws-sdk/client-sso-oidc@3.588.0) - '@aws-sdk/types': 3.577.0 - '@smithy/property-provider': 3.1.0 - '@smithy/shared-ini-file-loader': 3.1.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - dev: true - - /@aws-sdk/credential-provider-web-identity@3.587.0(@aws-sdk/client-sts@3.588.0): - resolution: {integrity: sha512-XqIx/I2PG7kyuw3WjAP9wKlxy8IvFJwB8asOFT1xPFoVfZYKIogjG9oLP5YiRtfvDkWIztHmg5MlVv3HdJDGRw==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@aws-sdk/client-sts': ^3.587.0 - dependencies: - '@aws-sdk/client-sts': 3.588.0 - '@aws-sdk/types': 3.577.0 - '@smithy/property-provider': 3.1.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/middleware-bucket-endpoint@3.587.0: - resolution: {integrity: sha512-HkFXLPl8pr6BH/Q0JpOESqEKL0ZK3sk7aSZ1S6GE4RXET7H5R94THULXqQFZzD48gZcyFooO/yNKZTqrZFaWKg==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-arn-parser': 3.568.0 - '@smithy/node-config-provider': 3.1.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/types': 3.0.0 - '@smithy/util-config-provider': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/middleware-expect-continue@3.577.0: - resolution: {integrity: sha512-6dPp8Tv4F0of4un5IAyG6q++GrRrNQQ4P2NAMB1W0VO4JoEu1C8GievbbDLi88TFIFmtKpnHB0ODCzwnoe8JsA==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/middleware-flexible-checksums@3.587.0: - resolution: {integrity: sha512-URMwp/budDvKhIvZ4a6zIBfFTun/iDlPWXqsGKYjEtHt8jz27OSjCZtDtIeqW4WTBdKL8KZgQcl+DdaE5M1qiQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-crypto/crc32': 3.0.0 - '@aws-crypto/crc32c': 3.0.0 - '@aws-sdk/types': 3.577.0 - '@smithy/is-array-buffer': 3.0.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/types': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/middleware-host-header@3.577.0: - resolution: {integrity: sha512-9ca5MJz455CODIVXs0/sWmJm7t3QO4EUa1zf8pE8grLpzf0J94bz/skDWm37Pli13T3WaAQBHCTiH2gUVfCsWg==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/middleware-location-constraint@3.577.0: - resolution: {integrity: sha512-DKPTD2D2s+t2QUo/IXYtVa/6Un8GZ+phSTBkyBNx2kfZz4Kwavhl/JJzSqTV3GfCXkVdFu7CrjoX7BZ6qWeTUA==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/middleware-logger@3.577.0: - resolution: {integrity: sha512-aPFGpGjTZcJYk+24bg7jT4XdIp42mFXSuPt49lw5KygefLyJM/sB0bKKqPYYivW0rcuZ9brQ58eZUNthrzYAvg==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/middleware-recursion-detection@3.577.0: - resolution: {integrity: sha512-pn3ZVEd2iobKJlR3H+bDilHjgRnNrQ6HMmK9ZzZw89Ckn3Dcbv48xOv4RJvu0aU8SDLl/SNCxppKjeLDTPGBNA==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/middleware-sdk-s3@3.587.0: - resolution: {integrity: sha512-vtXTGEiw1E9Fax4LmcU2Z208gbrC8ShrdsSLmGcRPpu5NPOGBFBSDG5sy5EDNClrFxIl/Le8coQnD0EDBtx+uQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-arn-parser': 3.568.0 - '@smithy/node-config-provider': 3.1.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/signature-v4': 3.0.0 - '@smithy/smithy-client': 3.1.1 - '@smithy/types': 3.0.0 - '@smithy/util-config-provider': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/middleware-signing@3.587.0: - resolution: {integrity: sha512-tiZaTDj4RvhXGRAlncFn7CSEfL3iNPO67WSaxAq+Ls5j1VgczPhu5262cWONNoMgth3nXR1hhLC4ITSl/a6AzA==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@smithy/property-provider': 3.1.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/signature-v4': 3.0.0 - '@smithy/types': 3.0.0 - '@smithy/util-middleware': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/middleware-ssec@3.577.0: - resolution: {integrity: sha512-i2BPJR+rp8xmRVIGc0h1kDRFcM2J9GnClqqpc+NLSjmYadlcg4mPklisz9HzwFVcRPJ5XcGf3U4BYs5G8+iTyg==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/middleware-user-agent@3.587.0: - resolution: {integrity: sha512-SyDomN+IOrygLucziG7/nOHkjUXES5oH5T7p8AboO8oakMQJdnudNXiYWTicQWO52R51U6CR27rcMPTGeMedYA==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.587.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/region-config-resolver@3.587.0: - resolution: {integrity: sha512-93I7IPZtulZQoRK+O20IJ4a1syWwYPzoO2gc3v+/GNZflZPV3QJXuVbIm0pxBsu0n/mzKGUKqSOLPIaN098HcQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@smithy/node-config-provider': 3.1.0 - '@smithy/types': 3.0.0 - '@smithy/util-config-provider': 3.0.0 - '@smithy/util-middleware': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/signature-v4-multi-region@3.587.0: - resolution: {integrity: sha512-TR9+ZSjdXvXUz54ayHcCihhcvxI9W7102J1OK6MrLgBlPE7uRhAx42BR9L5lLJ86Xj3LuqPWf//o9d/zR9WVIg==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/middleware-sdk-s3': 3.587.0 - '@aws-sdk/types': 3.577.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/signature-v4': 3.0.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.588.0): - resolution: {integrity: sha512-ULqhbnLy1hmJNRcukANBWJmum3BbjXnurLPSFXoGdV0llXYlG55SzIla2VYqdveQEEjmsBuTZdFvXAtNpmS5Zg==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@aws-sdk/client-sso-oidc': ^3.587.0 - dependencies: - '@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0) - '@aws-sdk/types': 3.577.0 - '@smithy/property-provider': 3.1.0 - '@smithy/shared-ini-file-loader': 3.1.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/types@3.577.0: - resolution: {integrity: sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/util-arn-parser@3.568.0: - resolution: {integrity: sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==} - engines: {node: '>=16.0.0'} - dependencies: - tslib: 2.6.2 - dev: true - - /@aws-sdk/util-endpoints@3.587.0: - resolution: {integrity: sha512-8I1HG6Em8wQWqKcRW6m358mqebRVNpL8XrrEoT4In7xqkKkmYtHRNVYP6lcmiQh5pZ/c/FXu8dSchuFIWyEtqQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@aws-sdk/types': 3.577.0 - '@smithy/types': 3.0.0 - '@smithy/util-endpoints': 2.0.1 - tslib: 2.6.2 - dev: true - - /@aws-sdk/util-locate-window@3.568.0: - resolution: {integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==} - engines: {node: '>=16.0.0'} - dependencies: - tslib: 2.6.2 - dev: true - - /@aws-sdk/util-user-agent-browser@3.577.0: - resolution: {integrity: sha512-zEAzHgR6HWpZOH7xFgeJLc6/CzMcx4nxeQolZxVZoB5pPaJd3CjyRhZN0xXeZB0XIRCWmb4yJBgyiugXLNMkLA==} - dependencies: - '@aws-sdk/types': 3.577.0 - '@smithy/types': 3.0.0 - bowser: 2.11.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/util-user-agent-node@3.587.0: - resolution: {integrity: sha512-Pnl+DUe/bvnbEEDHP3iVJrOtE3HbFJBPgsD6vJ+ml/+IYk1Eq49jEG+EHZdNTPz3SDG0kbp2+7u41MKYJHR/iQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - aws-crt: '>=1.0.0' - peerDependenciesMeta: - aws-crt: - optional: true - dependencies: - '@aws-sdk/types': 3.577.0 - '@smithy/node-config-provider': 3.1.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@aws-sdk/util-utf8-browser@3.259.0: - resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} - dependencies: - tslib: 2.6.2 - dev: true - - /@aws-sdk/xml-builder@3.575.0: - resolution: {integrity: sha512-cWgAwmbFYNCFzPwxL705+lWps0F3ZvOckufd2KKoEZUmtpVw9/txUXNrPySUXSmRTSRhoatIMABNfStWR043bQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@babel/code-frame@7.24.6: - resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.24.6 - picocolors: 1.0.1 - - /@babel/helper-validator-identifier@7.24.6: - resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} - engines: {node: '>=6.9.0'} - - /@babel/highlight@7.24.6: - resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.24.6 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - - /@colors/colors@1.5.0: - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - requiresBuild: true - dev: false - optional: true - - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/regexpp@4.10.1: - resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.5(supports-color@9.4.0) - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.5(supports-color@9.4.0) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true - - /@humanwhocodes/object-schema@2.0.3: - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - dev: true - - /@inquirer/confirm@3.1.9: - resolution: {integrity: sha512-UF09aejxCi4Xqm6N/jJAiFXArXfi9al52AFaSD+2uIHnhZGtd1d6lIGTRMPouVSJxbGEi+HkOWSYaiEY/+szUw==} - engines: {node: '>=18'} - dependencies: - '@inquirer/core': 8.2.2 - '@inquirer/type': 1.3.3 - dev: true - - /@inquirer/core@8.2.2: - resolution: {integrity: sha512-K8SuNX45jEFlX3EBJpu9B+S2TISzMPGXZIuJ9ME924SqbdW6Pt6fIkKvXg7mOEOKJ4WxpQsxj0UTfcL/A434Ww==} - engines: {node: '>=18'} - dependencies: - '@inquirer/figures': 1.0.3 - '@inquirer/type': 1.3.3 - '@types/mute-stream': 0.0.4 - '@types/node': 20.14.1 - '@types/wrap-ansi': 3.0.0 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-spinners: 2.9.2 - cli-width: 4.1.0 - mute-stream: 1.0.0 - signal-exit: 4.1.0 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - dev: true - - /@inquirer/figures@1.0.3: - resolution: {integrity: sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==} - engines: {node: '>=18'} - - /@inquirer/input@2.1.9: - resolution: {integrity: sha512-1xTCHmIe48x9CG1+8glAHrVVdH+QfYhzgBUbgyoVpp5NovnXgRcjSn/SNulepxf9Ol8HDq3gzw3ZCAUr+h1Eyg==} - engines: {node: '>=18'} - dependencies: - '@inquirer/core': 8.2.2 - '@inquirer/type': 1.3.3 - dev: true - - /@inquirer/select@2.3.5: - resolution: {integrity: sha512-IyBj8oEtmdF2Gx4FJTPtEya37MD6s0KATKsHqgmls0lK7EQbhYSq9GQlcFq6cBsYe/cgQ0Fg2cCqYYPi/d/fxQ==} - engines: {node: '>=18'} - dependencies: - '@inquirer/core': 8.2.2 - '@inquirer/figures': 1.0.3 - '@inquirer/type': 1.3.3 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - dev: true - - /@inquirer/type@1.3.3: - resolution: {integrity: sha512-xTUt0NulylX27/zMx04ZYar/kr1raaiFTVvQ5feljQsiAgdm0WPj4S73/ye0fbslh+15QrIuDvfCXTek7pMY5A==} - engines: {node: '>=18'} - dev: true - - /@jridgewell/resolve-uri@3.1.2: - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true - - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /@ljharb/through@2.3.13: - resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - dev: false - - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - - /@oclif/core@3.26.9: - resolution: {integrity: sha512-yB5Yxd62DsHqqCK/60L8IiGpTRIU4J+fzCqfbPRiIYE5+agfN63kppaM+TbqyMBdsnt/PQOnYD8Bhs1quUr6fg==} - engines: {node: '>=18.0.0'} - dependencies: - '@types/cli-progress': 3.11.5 - ansi-escapes: 4.3.2 - ansi-styles: 4.3.0 - cardinal: 2.1.1 - chalk: 4.1.2 - clean-stack: 3.0.1 - cli-progress: 3.12.0 - color: 4.2.3 - debug: 4.3.5(supports-color@8.1.1) - ejs: 3.1.10 - get-package-type: 0.1.0 - globby: 11.1.0 - hyperlinker: 1.0.0 - indent-string: 4.0.0 - is-wsl: 2.2.0 - js-yaml: 3.14.1 - minimatch: 9.0.4 - natural-orderby: 2.0.3 - object-treeify: 1.1.33 - password-prompt: 1.1.3 - slice-ansi: 4.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - supports-color: 8.1.1 - supports-hyperlinks: 2.3.0 - widest-line: 3.1.0 - wordwrap: 1.0.0 - wrap-ansi: 7.0.0 - - /@oclif/core@4.0.0-beta.13(typescript@5.4.5): - resolution: {integrity: sha512-ug8CZUCJphgetSZVgd4HQgyewlYVGGG1LIeFXGxjgYsjZ/f5I3nSCj7xpAMEDqjVD/lwmSujtVwa7tvEgLGICw==} - engines: {node: '>=18.0.0'} - dependencies: - ansi-escapes: 4.3.2 - ansis: 3.2.0 - clean-stack: 3.0.1 - cli-spinners: 2.9.2 - cosmiconfig: 9.0.0(typescript@5.4.5) - debug: 4.3.5(supports-color@9.4.0) - ejs: 3.1.10 - get-package-type: 0.1.0 - globby: 11.1.0 - indent-string: 4.0.0 - is-wsl: 2.2.0 - minimatch: 9.0.4 - string-width: 4.2.3 - supports-color: 9.4.0 - widest-line: 3.1.0 - wordwrap: 1.0.0 - wrap-ansi: 7.0.0 - transitivePeerDependencies: - - typescript - dev: false - - /@oclif/core@4.0.0-beta.15(typescript@5.4.5): - resolution: {integrity: sha512-pmtZk8IR4xqPrlmUpjZcg/dxI2OtMXpZERd9rmPUGsS9eta7gFBKFUXqxfL5Ey/0jL8sJmsbmHsSADml0ntMOg==} - engines: {node: '>=18.0.0'} - dependencies: - ansi-escapes: 4.3.2 - ansis: 3.2.0 - clean-stack: 3.0.1 - cli-spinners: 2.9.2 - cosmiconfig: 9.0.0(typescript@5.4.5) - debug: 4.3.5(supports-color@8.1.1) - ejs: 3.1.10 - get-package-type: 0.1.0 - globby: 11.1.0 - indent-string: 4.0.0 - is-wsl: 2.2.0 - minimatch: 9.0.4 - string-width: 4.2.3 - supports-color: 8.1.1 - widest-line: 3.1.0 - wordwrap: 1.0.0 - wrap-ansi: 7.0.0 - transitivePeerDependencies: - - typescript - - /@oclif/plugin-help@6.1.0(typescript@5.4.5): - resolution: {integrity: sha512-U+LNKKaZBroHqoSGIpYbQmkTl8aW0NJcO9tr091LJOZ74iqEDiupfBTCMuklW9uTZdWFYApqTmshDuB/I41jxQ==} - engines: {node: '>=18.0.0'} - dependencies: - '@oclif/core': 4.0.0-beta.15(typescript@5.4.5) - transitivePeerDependencies: - - typescript - - /@oclif/plugin-not-found@3.2.1(typescript@5.4.5): - resolution: {integrity: sha512-Y2FyWLEziTrgdQwd4LtZcYv3VOMeDhW0pW6hbE0u3fJdxs8f3JLfOHJPd8FPorVt2ldsaj4zcXUWA6vMQKeKbQ==} - engines: {node: '>=18.0.0'} - dependencies: - '@inquirer/confirm': 3.1.9 - '@oclif/core': 4.0.0-beta.15(typescript@5.4.5) - ansis: 3.2.0 - fast-levenshtein: 3.0.0 - transitivePeerDependencies: - - typescript - dev: true - - /@oclif/plugin-plugins@5.2.1(typescript@5.4.5): - resolution: {integrity: sha512-Qk0+7KIYK6cQz116ZyY25XRwniKuAAGKTvY2J91CDfyri0RYUOSDNOzz0m18IG2M51Tgiv8UNY74A3PIhQaEcw==} - engines: {node: '>=18.0.0'} - dependencies: - '@oclif/core': 4.0.0-beta.13(typescript@5.4.5) - ansis: 3.2.0 - debug: 4.3.5(supports-color@9.4.0) - npm: 10.8.1 - npm-package-arg: 11.0.2 - npm-run-path: 5.3.0 - object-treeify: 4.0.1 - semver: 7.6.2 - validate-npm-package-name: 5.0.1 - which: 4.0.0 - yarn: 1.22.22 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /@oclif/plugin-warn-if-update-available@3.1.3(typescript@5.4.5): - resolution: {integrity: sha512-xdnGWWYIhzZkkXh3sIeX8b0dwc83A7N95GvtiLdiY5veXgwNRXLf+3dNn8p/kAFKlhdh0pIQGeD7jmRYu74Q6Q==} - engines: {node: '>=18.0.0'} - dependencies: - '@oclif/core': 4.0.0-beta.15(typescript@5.4.5) - ansis: 3.2.0 - debug: 4.3.5(supports-color@9.4.0) - http-call: 5.3.0 - lodash: 4.17.21 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@oclif/prettier-config@0.2.1: - resolution: {integrity: sha512-XB8kwQj8zynXjIIWRm+6gO/r8Qft2xKtwBMSmq1JRqtA6TpwpqECqiu8LosBCyg2JBXuUy2lU23/L98KIR7FrQ==} - dev: true - - /@oclif/test@4.0.3(@oclif/core@3.26.9): - resolution: {integrity: sha512-LxcRYVFTUHoOW2Koo1lmbEwl/4HRFIdNWXuUY1/PHEawjwLvp3xwVe2rOWGqYD+vlHr+TYUw2QDQc8e2vUTDrw==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@oclif/core': '>= 3.0.0' - dependencies: - '@oclif/core': 3.26.9 - ansis: 3.2.0 - debug: 4.3.5(supports-color@9.4.0) - transitivePeerDependencies: - - supports-color - dev: true - - /@sindresorhus/is@5.6.0: - resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} - engines: {node: '>=14.16'} - dev: true - - /@smithy/abort-controller@3.0.0: - resolution: {integrity: sha512-p6GlFGBt9K4MYLu72YuJ523NVR4A8oHlC5M2JO6OmQqN8kAc/uh1JqLE+FizTokrSJGg0CSvC+BrsmGzKtsZKA==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/chunked-blob-reader-native@3.0.0: - resolution: {integrity: sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==} - dependencies: - '@smithy/util-base64': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/chunked-blob-reader@3.0.0: - resolution: {integrity: sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==} - dependencies: - tslib: 2.6.2 - dev: true - - /@smithy/config-resolver@3.0.1: - resolution: {integrity: sha512-hbkYJc20SBDz2qqLzttjI/EqXemtmWk0ooRznLsiXp3066KQRTvuKHa7U4jCZCJq6Dozqvy0R1/vNESC9inPJg==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/node-config-provider': 3.1.0 - '@smithy/types': 3.0.0 - '@smithy/util-config-provider': 3.0.0 - '@smithy/util-middleware': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/core@2.1.1: - resolution: {integrity: sha512-0vbIwwUcg0FMhTVJgMhbsRSAFL0rwduy/OQz7Xq1pJXJOyaGv+PGjj1iGawRlzBUPA5BkJv7S6q+YU2U8gk/WA==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/middleware-endpoint': 3.0.1 - '@smithy/middleware-retry': 3.0.3 - '@smithy/middleware-serde': 3.0.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/smithy-client': 3.1.1 - '@smithy/types': 3.0.0 - '@smithy/util-middleware': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/credential-provider-imds@3.1.0: - resolution: {integrity: sha512-q4A4d38v8pYYmseu/jTS3Z5I3zXlEOe5Obi+EJreVKgSVyWUHOd7/yaVCinC60QG4MRyCs98tcxBH1IMC0bu7Q==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/node-config-provider': 3.1.0 - '@smithy/property-provider': 3.1.0 - '@smithy/types': 3.0.0 - '@smithy/url-parser': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/eventstream-codec@3.0.0: - resolution: {integrity: sha512-PUtyEA0Oik50SaEFCZ0WPVtF9tz/teze2fDptW6WRXl+RrEenH8UbEjudOz8iakiMl3lE3lCVqYf2Y+znL8QFQ==} - dependencies: - '@aws-crypto/crc32': 3.0.0 - '@smithy/types': 3.0.0 - '@smithy/util-hex-encoding': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/eventstream-serde-browser@3.0.0: - resolution: {integrity: sha512-NB7AFiPN4NxP/YCAnrvYR18z2/ZsiHiF7VtG30gshO9GbFrIb1rC8ep4NGpJSWrz6P64uhPXeo4M0UsCLnZKqw==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/eventstream-serde-universal': 3.0.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/eventstream-serde-config-resolver@3.0.0: - resolution: {integrity: sha512-RUQG3vQ3LX7peqqHAbmayhgrF5aTilPnazinaSGF1P0+tgM3vvIRWPHmlLIz2qFqB9LqFIxditxc8O2Z6psrRw==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/eventstream-serde-node@3.0.0: - resolution: {integrity: sha512-baRPdMBDMBExZXIUAoPGm/hntixjt/VFpU6+VmCyiYJYzRHRxoaI1MN+5XE+hIS8AJ2GCHLMFEIOLzq9xx1EgQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/eventstream-serde-universal': 3.0.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/eventstream-serde-universal@3.0.0: - resolution: {integrity: sha512-HNFfShmotWGeAoW4ujP8meV9BZavcpmerDbPIjkJbxKbN8RsUcpRQ/2OyIxWNxXNH2GWCAxuSB7ynmIGJlQ3Dw==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/eventstream-codec': 3.0.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/fetch-http-handler@3.0.1: - resolution: {integrity: sha512-uaH74i5BDj+rBwoQaXioKpI0SHBJFtOVwzrCpxZxphOW0ki5jhj7dXvDMYM2IJem8TpdFvS2iC08sjOblfFGFg==} - dependencies: - '@smithy/protocol-http': 4.0.0 - '@smithy/querystring-builder': 3.0.0 - '@smithy/types': 3.0.0 - '@smithy/util-base64': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/hash-blob-browser@3.0.0: - resolution: {integrity: sha512-/Wbpdg+bwJvW7lxR/zpWAc1/x/YkcqguuF2bAzkJrvXriZu1vm8r+PUdE4syiVwQg7PPR2dXpi3CLBb9qRDaVQ==} - dependencies: - '@smithy/chunked-blob-reader': 3.0.0 - '@smithy/chunked-blob-reader-native': 3.0.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/hash-node@3.0.0: - resolution: {integrity: sha512-84qXstNemP3XS5jcof0el6+bDfjzuvhJPQTEfro3lgtbCtKgzPm3MgiS6ehXVPjeQ5+JS0HqmTz8f/RYfzHVxw==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/types': 3.0.0 - '@smithy/util-buffer-from': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/hash-stream-node@3.0.0: - resolution: {integrity: sha512-J0i7de+EgXDEGITD4fxzmMX8CyCNETTIRXlxjMiNUvvu76Xn3GJ31wQR85ynlPk2wI1lqoknAFJaD1fiNDlbIA==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/types': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/invalid-dependency@3.0.0: - resolution: {integrity: sha512-F6wBBaEFgJzj0s4KUlliIGPmqXemwP6EavgvDqYwCH40O5Xr2iMHvS8todmGVZtuJCorBkXsYLyTu4PuizVq5g==} - dependencies: - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/is-array-buffer@3.0.0: - resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} - engines: {node: '>=16.0.0'} - dependencies: - tslib: 2.6.2 - dev: true - - /@smithy/md5-js@3.0.0: - resolution: {integrity: sha512-Tm0vrrVzjlD+6RCQTx7D3Ls58S3FUH1ZCtU1MIh/qQmaOo1H9lMN2as6CikcEwgattnA9SURSdoJJ27xMcEfMA==} - dependencies: - '@smithy/types': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/middleware-content-length@3.0.0: - resolution: {integrity: sha512-3C4s4d/iGobgCtk2tnWW6+zSTOBg1PRAm2vtWZLdriwTroFbbWNSr3lcyzHdrQHnEXYCC5K52EbpfodaIUY8sg==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/protocol-http': 4.0.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/middleware-endpoint@3.0.1: - resolution: {integrity: sha512-lQ/UOdGD4KM5kLZiAl0q8Qy3dPbynvAXKAdXnYlrA1OpaUwr+neSsVokDZpY6ZVb5Yx8jnus29uv6XWpM9P4SQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/middleware-serde': 3.0.0 - '@smithy/node-config-provider': 3.1.0 - '@smithy/shared-ini-file-loader': 3.1.0 - '@smithy/types': 3.0.0 - '@smithy/url-parser': 3.0.0 - '@smithy/util-middleware': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/middleware-retry@3.0.3: - resolution: {integrity: sha512-Wve1qzJb83VEU/6q+/I0cQdAkDnuzELC6IvIBwDzUEiGpKqXgX1v10FUuZGbRS6Ov/P+HHthcAoHOJZQvZNAkA==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/node-config-provider': 3.1.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/service-error-classification': 3.0.0 - '@smithy/smithy-client': 3.1.1 - '@smithy/types': 3.0.0 - '@smithy/util-middleware': 3.0.0 - '@smithy/util-retry': 3.0.0 - tslib: 2.6.2 - uuid: 9.0.1 - dev: true - - /@smithy/middleware-serde@3.0.0: - resolution: {integrity: sha512-I1vKG1foI+oPgG9r7IMY1S+xBnmAn1ISqployvqkwHoSb8VPsngHDTOgYGYBonuOKndaWRUGJZrKYYLB+Ane6w==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/middleware-stack@3.0.0: - resolution: {integrity: sha512-+H0jmyfAyHRFXm6wunskuNAqtj7yfmwFB6Fp37enytp2q047/Od9xetEaUbluyImOlGnGpaVGaVfjwawSr+i6Q==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/node-config-provider@3.1.0: - resolution: {integrity: sha512-ngfB8QItUfTFTfHMvKuc2g1W60V1urIgZHqD1JNFZC2tTWXahqf2XvKXqcBS7yZqR7GqkQQZy11y/lNOUWzq7Q==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/property-provider': 3.1.0 - '@smithy/shared-ini-file-loader': 3.1.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/node-http-handler@3.0.0: - resolution: {integrity: sha512-3trD4r7NOMygwLbUJo4eodyQuypAWr7uvPnebNJ9a70dQhVn+US8j/lCnvoJS6BXfZeF7PkkkI0DemVJw+n+eQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/abort-controller': 3.0.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/querystring-builder': 3.0.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/property-provider@3.1.0: - resolution: {integrity: sha512-Tj3+oVhqdZgemjCiWjFlADfhvLF4C/uKDuKo7/tlEsRQ9+3emCreR2xndj970QSRSsiCEU8hZW3/8JQu+n5w4Q==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/protocol-http@4.0.0: - resolution: {integrity: sha512-qOQZOEI2XLWRWBO9AgIYuHuqjZ2csyr8/IlgFDHDNuIgLAMRx2Bl8ck5U5D6Vh9DPdoaVpuzwWMa0xcdL4O/AQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/querystring-builder@3.0.0: - resolution: {integrity: sha512-bW8Fi0NzyfkE0TmQphDXr1AmBDbK01cA4C1Z7ggwMAU5RDz5AAv/KmoRwzQAS0kxXNf/D2ALTEgwK0U2c4LtRg==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/types': 3.0.0 - '@smithy/util-uri-escape': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/querystring-parser@3.0.0: - resolution: {integrity: sha512-UzHwthk0UEccV4dHzPySnBy34AWw3V9lIqUTxmozQ+wPDAO9csCWMfOLe7V9A2agNYy7xE+Pb0S6K/J23JSzfQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/service-error-classification@3.0.0: - resolution: {integrity: sha512-3BsBtOUt2Gsnc3X23ew+r2M71WwtpHfEDGhHYHSDg6q1t8FrWh15jT25DLajFV1H+PpxAJ6gqe9yYeRUsmSdFA==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/types': 3.0.0 - dev: true - - /@smithy/shared-ini-file-loader@3.1.0: - resolution: {integrity: sha512-dAM7wSX0NR3qTNyGVN/nwwpEDzfV9T/3AN2eABExWmda5VqZKSsjlINqomO5hjQWGv+IIkoXfs3u2vGSNz8+Rg==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/signature-v4@3.0.0: - resolution: {integrity: sha512-kXFOkNX+BQHe2qnLxpMEaCRGap9J6tUGLzc3A9jdn+nD4JdMwCKTJ+zFwQ20GkY+mAXGatyTw3HcoUlR39HwmA==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/is-array-buffer': 3.0.0 - '@smithy/types': 3.0.0 - '@smithy/util-hex-encoding': 3.0.0 - '@smithy/util-middleware': 3.0.0 - '@smithy/util-uri-escape': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/smithy-client@3.1.1: - resolution: {integrity: sha512-tj4Ku7MpzZR8cmVuPcSbrLFVxmptWktmJMwST/uIEq4sarabEdF8CbmQdYB7uJ/X51Qq2EYwnRsoS7hdR4B7rA==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/middleware-endpoint': 3.0.1 - '@smithy/middleware-stack': 3.0.0 - '@smithy/protocol-http': 4.0.0 - '@smithy/types': 3.0.0 - '@smithy/util-stream': 3.0.1 - tslib: 2.6.2 - dev: true - - /@smithy/types@3.0.0: - resolution: {integrity: sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw==} - engines: {node: '>=16.0.0'} - dependencies: - tslib: 2.6.2 - dev: true - - /@smithy/url-parser@3.0.0: - resolution: {integrity: sha512-2XLazFgUu+YOGHtWihB3FSLAfCUajVfNBXGGYjOaVKjLAuAxx3pSBY3hBgLzIgB17haf59gOG3imKqTy8mcrjw==} - dependencies: - '@smithy/querystring-parser': 3.0.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/util-base64@3.0.0: - resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/util-buffer-from': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/util-body-length-browser@3.0.0: - resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==} - dependencies: - tslib: 2.6.2 - dev: true - - /@smithy/util-body-length-node@3.0.0: - resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==} - engines: {node: '>=16.0.0'} - dependencies: - tslib: 2.6.2 - dev: true - - /@smithy/util-buffer-from@3.0.0: - resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/is-array-buffer': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/util-config-provider@3.0.0: - resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} - engines: {node: '>=16.0.0'} - dependencies: - tslib: 2.6.2 - dev: true - - /@smithy/util-defaults-mode-browser@3.0.3: - resolution: {integrity: sha512-3DFON2bvXJAukJe+qFgPV/rorG7ZD3m4gjCXHD1V5z/tgKQp5MCTCLntrd686tX6tj8Uli3lefWXJudNg5WmCA==} - engines: {node: '>= 10.0.0'} - dependencies: - '@smithy/property-provider': 3.1.0 - '@smithy/smithy-client': 3.1.1 - '@smithy/types': 3.0.0 - bowser: 2.11.0 - tslib: 2.6.2 - dev: true - - /@smithy/util-defaults-mode-node@3.0.3: - resolution: {integrity: sha512-D0b8GJXecT00baoSQ3Iieu3k3mZ7GY8w1zmg8pdogYrGvWJeLcIclqk2gbkG4K0DaBGWrO6v6r20iwIFfDYrmA==} - engines: {node: '>= 10.0.0'} - dependencies: - '@smithy/config-resolver': 3.0.1 - '@smithy/credential-provider-imds': 3.1.0 - '@smithy/node-config-provider': 3.1.0 - '@smithy/property-provider': 3.1.0 - '@smithy/smithy-client': 3.1.1 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/util-endpoints@2.0.1: - resolution: {integrity: sha512-ZRT0VCOnKlVohfoABMc8lWeQo/JEFuPWctfNRXgTHbyOVssMOLYFUNWukxxiHRGVAhV+n3c0kPW+zUqckjVPEA==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/node-config-provider': 3.1.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/util-hex-encoding@3.0.0: - resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} - engines: {node: '>=16.0.0'} - dependencies: - tslib: 2.6.2 - dev: true - - /@smithy/util-middleware@3.0.0: - resolution: {integrity: sha512-q5ITdOnV2pXHSVDnKWrwgSNTDBAMHLptFE07ua/5Ty5WJ11bvr0vk2a7agu7qRhrCFRQlno5u3CneU5EELK+DQ==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/util-retry@3.0.0: - resolution: {integrity: sha512-nK99bvJiziGv/UOKJlDvFF45F00WgPLKVIGUfAK+mDhzVN2hb/S33uW2Tlhg5PVBoqY7tDVqL0zmu4OxAHgo9g==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/service-error-classification': 3.0.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/util-stream@3.0.1: - resolution: {integrity: sha512-7F7VNNhAsfMRA8I986YdOY5fE0/T1/ZjFF6OLsqkvQVNP3vZ/szYDfGCyphb7ioA09r32K/0qbSFfNFU68aSzA==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/fetch-http-handler': 3.0.1 - '@smithy/node-http-handler': 3.0.0 - '@smithy/types': 3.0.0 - '@smithy/util-base64': 3.0.0 - '@smithy/util-buffer-from': 3.0.0 - '@smithy/util-hex-encoding': 3.0.0 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/util-uri-escape@3.0.0: - resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==} - engines: {node: '>=16.0.0'} - dependencies: - tslib: 2.6.2 - dev: true - - /@smithy/util-utf8@3.0.0: - resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/util-buffer-from': 3.0.0 - tslib: 2.6.2 - dev: true - - /@smithy/util-waiter@3.0.0: - resolution: {integrity: sha512-+fEXJxGDLCoqRKVSmo0auGxaqbiCo+8oph+4auefYjaNxjOLKSY2MxVQfRzo65PaZv4fr+5lWg+au7vSuJJ/zw==} - engines: {node: '>=16.0.0'} - dependencies: - '@smithy/abort-controller': 3.0.0 - '@smithy/types': 3.0.0 - tslib: 2.6.2 - dev: true - - /@szmarczak/http-timer@5.0.1: - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} - dependencies: - defer-to-connect: 2.0.1 - dev: true - - /@tsconfig/node10@1.0.11: - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - dev: true - - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true - - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true - - /@tsconfig/node16@1.0.4: - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true - - /@types/chai@4.3.16: - resolution: {integrity: sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==} - dev: true - - /@types/cli-progress@3.11.5: - resolution: {integrity: sha512-D4PbNRbviKyppS5ivBGyFO29POlySLmA2HyUFE4p5QGazAMM3CwkKWcvTl8gvElSuxRh6FPKL8XmidX873ou4g==} - dependencies: - '@types/node': 18.19.34 - - /@types/http-cache-semantics@4.0.4: - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - dev: true - - /@types/inquirer@9.0.7: - resolution: {integrity: sha512-Q0zyBupO6NxGRZut/JdmqYKOnN95Eg5V8Csg3PGKkP+FnvsUZx1jAyK7fztIszxxMuoBA6E3KXWvdZVXIpx60g==} - dependencies: - '@types/through': 0.0.33 - rxjs: 7.8.1 - dev: true - - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true - - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true - - /@types/mocha@10.0.6: - resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} - dev: true - - /@types/mute-stream@0.0.4: - resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} - dependencies: - '@types/node': 18.19.34 - dev: true - - /@types/node@18.19.34: - resolution: {integrity: sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==} - dependencies: - undici-types: 5.26.5 - - /@types/node@20.14.1: - resolution: {integrity: sha512-T2MzSGEu+ysB/FkWfqmhV3PLyQlowdptmmgD20C6QxsS8Fmv5SjpZ1ayXaEC0S21/h5UJ9iA6W/5vSNU5l00OA==} - dependencies: - undici-types: 5.26.5 - dev: true - - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: true - - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - dev: true - - /@types/through@0.0.33: - resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} - dependencies: - '@types/node': 18.19.34 - dev: true - - /@types/wrap-ansi@3.0.0: - resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} - dev: true - - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.1 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5(supports-color@9.4.0) - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5(supports-color@9.4.0) - eslint: 8.57.0 - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/scope-manager@6.21.0: - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - dev: true - - /@typescript-eslint/scope-manager@7.12.0: - resolution: {integrity: sha512-itF1pTnN6F3unPak+kutH9raIkL3lhH1YRPGgt7QQOh43DQKVJXmWkpb+vpc/TiDHs6RSd9CTbDsc/Y+Ygq7kg==} - engines: {node: ^18.18.0 || >=20.0.0} - dependencies: - '@typescript-eslint/types': 7.12.0 - '@typescript-eslint/visitor-keys': 7.12.0 - dev: true - - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.5(supports-color@9.4.0) - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/types@6.21.0: - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true - - /@typescript-eslint/types@7.12.0: - resolution: {integrity: sha512-o+0Te6eWp2ppKY3mLCU+YA9pVJxhUJE15FV7kxuD9jgwIAa+w/ycGJBMrYDTpVGUM/tgpa9SeMOugSabWFq7bg==} - engines: {node: ^18.18.0 || >=20.0.0} - dev: true - - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5(supports-color@9.4.0) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/typescript-estree@7.12.0(typescript@5.4.5): - resolution: {integrity: sha512-5bwqLsWBULv1h6pn7cMW5dXX/Y2amRqLaKqsASVwbBHMZSnHqE/HN4vT4fE0aFsiwxYvr98kqOWh1a8ZKXalCQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 7.12.0 - '@typescript-eslint/visitor-keys': 7.12.0 - debug: 4.3.5(supports-color@9.4.0) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.4 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - eslint: 8.57.0 - semver: 7.6.2 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/utils@7.12.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-Y6hhwxwDx41HNpjuYswYp6gDbkiZ8Hin9Bf5aJQn1bpTs3afYY4GX+MPYxma8jtoIV2GRwTM/UJm/2uGCVv+DQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.12.0 - '@typescript-eslint/types': 7.12.0 - '@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5) - eslint: 8.57.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/visitor-keys@6.21.0: - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@typescript-eslint/visitor-keys@7.12.0: - resolution: {integrity: sha512-uZk7DevrQLL3vSnfFl5bj4sL75qC9D6EdjemIdbtkuUmIheWpuiiylSY01JxJE7+zGrOWDZrp1WxOuDntvKrHQ==} - engines: {node: ^18.18.0 || >=20.0.0} - dependencies: - '@typescript-eslint/types': 7.12.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - - /acorn-jsx@5.3.2(acorn@8.11.3): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.3 - dev: true - - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - - /ansi-colors@4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - dev: true - - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.21.3 - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - - /ansicolors@0.3.2: - resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} - - /ansis@3.2.0: - resolution: {integrity: sha512-Yk3BkHH9U7oPyCN3gL5Tc7CpahG/+UFv/6UG03C311Vy9lzRmA5uoxDTpU9CO3rGHL6KzJz/pdDeXZCZ5Mu/Sg==} - engines: {node: '>=15'} - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - dev: true - - /array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - dev: true - - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - /array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - dev: true - - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - dev: true - - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true - - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - - /async-retry@1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} - dependencies: - retry: 0.13.1 - dev: true - - /async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false - - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - dependencies: - possible-typed-array-names: 1.0.0 - dev: true - - /axios@1.7.2: - resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==} - dependencies: - follow-redirects: 1.15.6 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: false - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: false - - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - dev: true - - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - dev: false - - /bowser@2.11.0: - resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} - dev: true - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.1.1 - - /browser-stdout@1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - dev: true - - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: false - - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true - - /builtins@5.1.0: - resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} - dependencies: - semver: 7.6.2 - dev: true - - /cacheable-lookup@7.0.0: - resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} - engines: {node: '>=14.16'} - dev: true - - /cacheable-request@10.2.14: - resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} - engines: {node: '>=14.16'} - dependencies: - '@types/http-cache-semantics': 4.0.4 - get-stream: 6.0.1 - http-cache-semantics: 4.1.1 - keyv: 4.5.4 - mimic-response: 4.0.0 - normalize-url: 8.0.1 - responselike: 3.0.0 - dev: true - - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - /camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - dependencies: - pascal-case: 3.1.2 - tslib: 2.6.2 - dev: true - - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true - - /capital-case@1.0.4: - resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - upper-case-first: 2.0.2 - dev: true - - /cardinal@2.1.1: - resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} - hasBin: true - dependencies: - ansicolors: 0.3.2 - redeyed: 2.1.1 - - /chai@4.4.1: - resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} - engines: {node: '>=4'} - dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.3 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.0.8 - dev: true - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: false - - /change-case@4.1.2: - resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} - dependencies: - camel-case: 4.1.2 - capital-case: 1.0.4 - constant-case: 3.0.4 - dot-case: 3.0.4 - header-case: 2.0.4 - no-case: 3.0.4 - param-case: 3.0.4 - pascal-case: 3.1.2 - path-case: 3.0.4 - sentence-case: 3.0.4 - snake-case: 3.0.4 - tslib: 2.6.2 - dev: true - - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: false - - /check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} - dependencies: - get-func-name: 2.0.2 - dev: true - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: true - - /clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - - /clean-stack@3.0.1: - resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} - engines: {node: '>=10'} - dependencies: - escape-string-regexp: 4.0.0 - - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - dependencies: - restore-cursor: 3.1.0 - dev: false - - /cli-progress@3.12.0: - resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} - engines: {node: '>=4'} - dependencies: - string-width: 4.2.3 - - /cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - - /cli-table3@0.6.5: - resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} - engines: {node: 10.* || >= 12.*} - dependencies: - string-width: 4.2.3 - optionalDependencies: - '@colors/colors': 1.5.0 - dev: false - - /cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: false - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - /color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - - /color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: false - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - /confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - dev: true - - /constant-case@3.0.4: - resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - upper-case: 2.0.2 - dev: true - - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: true - - /copy-anything@3.0.5: - resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} - engines: {node: '>=12.13'} - dependencies: - is-what: 4.1.16 - dev: false - - /cosmiconfig@9.0.0(typescript@5.4.5): - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - typescript: 5.4.5 - - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: true - - /debug@4.3.4(supports-color@8.1.1): - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - supports-color: 8.1.1 - dev: true - - /debug@4.3.5(supports-color@8.1.1): - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - supports-color: 8.1.1 - - /debug@4.3.5(supports-color@9.4.0): - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - supports-color: 9.4.0 - - /decamelize@4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} - dev: true - - /decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - dependencies: - mimic-response: 3.1.0 - dev: true - - /deep-eql@4.1.3: - resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} - engines: {node: '>=6'} - dependencies: - type-detect: 4.0.8 - dev: true - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - dependencies: - clone: 1.0.4 - dev: false - - /defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - dev: true - - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - dev: true - - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false - - /detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} - engines: {node: '>=12.20'} - dev: true - - /detect-newline@4.0.1: - resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true - - /diff@5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} - engines: {node: '>=0.3.1'} - dev: true - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - dev: true - - /ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - jake: 10.9.1 - - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - /enhanced-resolve@5.16.1: - resolution: {integrity: sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - dev: true - - /env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - - /es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - dev: true - - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - dev: true - - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - dev: true - - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - dependencies: - hasown: 2.0.2 - dev: true - - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true - - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - /eslint-config-oclif-typescript@3.1.7(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-5q6Q1NjQt6WrAANGO9Go3uuxZTzf7ywmecRNW7e+bTnlkTk0/ClPd6SogH+qkwOkFJaMHmBp45ZmzvwGzy/Txg==} - engines: {node: '>=18.0.0'} - dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - eslint-config-xo-space: 0.35.0(eslint@8.57.0) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-mocha: 10.4.3(eslint@8.57.0) - eslint-plugin-n: 15.7.0(eslint@8.57.0) - eslint-plugin-perfectionist: 2.10.0(eslint@8.57.0)(typescript@5.4.5) - transitivePeerDependencies: - - astro-eslint-parser - - eslint - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - - svelte - - svelte-eslint-parser - - typescript - - vue-eslint-parser - dev: true - - /eslint-config-oclif@5.2.0(eslint@8.57.0): - resolution: {integrity: sha512-fd2rFmm1x5YvTHNklSigbKj8ymo/uAU/PKBic/Yc+9yCRHgOAQos01mBLYVw9oeoyVLx+d79YVidkqgPoyx6RQ==} - engines: {node: '>=18.0.0'} - dependencies: - eslint-config-xo-space: 0.35.0(eslint@8.57.0) - eslint-plugin-mocha: 10.4.3(eslint@8.57.0) - eslint-plugin-n: 15.7.0(eslint@8.57.0) - eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) - transitivePeerDependencies: - - eslint - dev: true - - /eslint-config-prettier@9.1.0(eslint@8.57.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.57.0 - dev: true - - /eslint-config-xo-space@0.35.0(eslint@8.57.0): - resolution: {integrity: sha512-+79iVcoLi3PvGcjqYDpSPzbLfqYpNcMlhsCBRsnmDoHAn4npJG6YxmHpelQKpXM7v/EeZTUKb4e1xotWlei8KA==} - engines: {node: '>=12'} - peerDependencies: - eslint: '>=8.56.0' - dependencies: - eslint: 8.57.0 - eslint-config-xo: 0.44.0(eslint@8.57.0) - dev: true - - /eslint-config-xo@0.44.0(eslint@8.57.0): - resolution: {integrity: sha512-YG4gdaor0mJJi8UBeRJqDPO42MedTWYMaUyucF5bhm2pi/HS98JIxfFQmTLuyj6hGpQlAazNfyVnn7JuDn+Sew==} - engines: {node: '>=18'} - peerDependencies: - eslint: '>=8.56.0' - dependencies: - confusing-browser-globals: 1.0.11 - eslint: 8.57.0 - dev: true - - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - dependencies: - debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0): - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - dependencies: - debug: 4.3.5(supports-color@9.4.0) - enhanced-resolve: 5.16.1 - eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - fast-glob: 3.3.2 - get-tsconfig: 4.7.5 - is-core-module: 2.13.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - debug: 3.2.7 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-plugin-es@4.1.0(eslint@8.57.0): - resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' - dependencies: - eslint: 8.57.0 - eslint-utils: 2.1.0 - regexpp: 3.2.0 - dev: true - - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - hasown: 2.0.2 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-plugin-mocha@10.4.3(eslint@8.57.0): - resolution: {integrity: sha512-emc4TVjq5Ht0/upR+psftuz6IBG5q279p+1dSRDeHf+NS9aaerBi3lXKo1SEzwC29hFIW21gO89CEWSvRsi8IQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.57.0 - eslint-utils: 3.0.0(eslint@8.57.0) - globals: 13.24.0 - rambda: 7.5.0 - dev: true - - /eslint-plugin-n@15.7.0(eslint@8.57.0): - resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} - engines: {node: '>=12.22.0'} - peerDependencies: - eslint: '>=7.0.0' - dependencies: - builtins: 5.1.0 - eslint: 8.57.0 - eslint-plugin-es: 4.1.0(eslint@8.57.0) - eslint-utils: 3.0.0(eslint@8.57.0) - ignore: 5.3.1 - is-core-module: 2.13.1 - minimatch: 3.1.2 - resolve: 1.22.8 - semver: 7.6.2 - dev: true - - /eslint-plugin-perfectionist@2.10.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-P+tdrkHeMWBc55+DZsoDOAftV1WCsEoHaKm6JC7zajFus/syfT4vUPBFb3atGFSuyaVnGQGHlcKpP9X3Q0gH/w==} - peerDependencies: - astro-eslint-parser: ^0.16.0 - eslint: '>=8.0.0' - svelte: '>=3.0.0' - svelte-eslint-parser: ^0.33.0 - vue-eslint-parser: '>=9.0.0' - peerDependenciesMeta: - astro-eslint-parser: - optional: true - svelte: - optional: true - svelte-eslint-parser: - optional: true - vue-eslint-parser: - optional: true - dependencies: - '@typescript-eslint/utils': 7.12.0(eslint@8.57.0)(typescript@5.4.5) - eslint: 8.57.0 - minimatch: 9.0.4 - natural-compare-lite: 1.4.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-unicorn@48.0.1(eslint@8.57.0): - resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} - engines: {node: '>=16'} - peerDependencies: - eslint: '>=8.44.0' - dependencies: - '@babel/helper-validator-identifier': 7.24.6 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - ci-info: 3.9.0 - clean-regexp: 1.0.0 - eslint: 8.57.0 - esquery: 1.5.0 - indent-string: 4.0.0 - is-builtin-module: 3.2.1 - jsesc: 3.0.2 - lodash: 4.17.21 - pluralize: 8.0.0 - read-pkg-up: 7.0.1 - regexp-tree: 0.1.27 - regjsparser: 0.10.0 - semver: 7.6.2 - strip-indent: 3.0.0 - dev: true - - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - - /eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - dependencies: - eslint-visitor-keys: 1.3.0 - dev: true - - /eslint-utils@3.0.0(eslint@8.57.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - dev: true - - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.5(supports-color@9.4.0) - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.1 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 - dev: true - - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: true - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: true - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - dev: false - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.7 - - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true - - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true - - /fast-levenshtein@3.0.0: - resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} - dependencies: - fastest-levenshtein: 1.0.16 - dev: true - - /fast-xml-parser@4.2.5: - resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} - hasBin: true - dependencies: - strnum: 1.0.5 - dev: true - - /fastest-levenshtein@1.0.16: - resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} - engines: {node: '>= 4.9.1'} - dev: true - - /fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - dependencies: - reusify: 1.0.4 - - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.2.0 - dev: true - - /filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - dependencies: - minimatch: 5.1.6 - - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: true - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - - /find-yarn-workspace-root@2.0.0: - resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} - dependencies: - micromatch: 4.0.7 - dev: true - - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - rimraf: 3.0.2 - dev: true - - /flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - dev: true - - /flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - dev: true - - /follow-redirects@1.15.6: - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false - - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: true - - /form-data-encoder@2.1.4: - resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} - engines: {node: '>= 14.17'} - dev: true - - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - - /fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - functions-have-names: 1.2.3 - dev: true - - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true - - /get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - dev: true - - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - - /get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - dev: true - - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true - - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - dev: true - - /get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} - dependencies: - resolve-pkg-maps: 1.0.0 - dev: true - - /git-hooks-list@3.1.0: - resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} - dev: true - - /github-slugger@2.0.0: - resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.0.1 - once: 1.4.0 - dev: true - - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - - /globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.1 - gopd: 1.0.1 - dev: true - - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 3.0.0 - - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 4.0.0 - dev: true - - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.2.4 - - /got@13.0.0: - resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} - engines: {node: '>=16'} - dependencies: - '@sindresorhus/is': 5.6.0 - '@szmarczak/http-timer': 5.0.1 - cacheable-lookup: 7.0.0 - cacheable-request: 10.2.14 - decompress-response: 6.0.0 - form-data-encoder: 2.1.4 - get-stream: 6.0.1 - http2-wrapper: 2.2.1 - lowercase-keys: 3.0.0 - p-cancelable: 3.0.0 - responselike: 3.0.0 - dev: true - - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true - - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true - - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true - - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - dependencies: - es-define-property: 1.0.0 +importers: + + .: + dependencies: + axios: + specifier: ^1.7.2 + version: 1.15.0 + chalk: + specifier: ^5.3.0 + version: 5.6.2 + commander: + specifier: ^13.1.0 + version: 13.1.0 + devDependencies: + '@biomejs/biome': + specifier: 2.1.1 + version: 2.1.1 + '@types/node': + specifier: ^18 + version: 18.19.130 + tsx: + specifier: ^4.21.0 + version: 4.21.0 + typescript: + specifier: ^5 + version: 5.9.3 + vitest: + specifier: ^4.1.4 + version: 4.1.4(@types/node@18.19.130)(vite@8.0.8(@types/node@18.19.130)(esbuild@0.27.7)(tsx@4.21.0)) - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} +packages: - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} + '@biomejs/biome@2.1.1': + resolution: {integrity: sha512-HFGYkxG714KzG+8tvtXCJ1t1qXQMzgWzfvQaUjxN6UeKv+KvMEuliInnbZLJm6DXFXwqVi6446EGI0sGBLIYng==} + engines: {node: '>=14.21.3'} + hasBin: true - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true + '@biomejs/cli-darwin-arm64@2.1.1': + resolution: {integrity: sha512-2Muinu5ok4tWxq4nu5l19el48cwCY/vzvI7Vjbkf3CYIQkjxZLyj0Ad37Jv2OtlXYaLvv+Sfu1hFeXt/JwRRXQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 + '@biomejs/cli-darwin-x64@2.1.1': + resolution: {integrity: sha512-cC8HM5lrgKQXLAK+6Iz2FrYW5A62pAAX6KAnRlEyLb+Q3+Kr6ur/sSuoIacqlp1yvmjHJqjYfZjPvHWnqxoEIA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: true + '@biomejs/cli-linux-arm64-musl@2.1.1': + resolution: {integrity: sha512-/7FBLnTswu4jgV9ttI3AMIdDGqVEPIZd8I5u2D4tfCoj8rl9dnjrEQbAIDlWhUXdyWlFSz8JypH3swU9h9P+2A==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@biomejs/cli-linux-arm64@2.1.1': + resolution: {integrity: sha512-tw4BEbhAUkWPe4WBr6IX04DJo+2jz5qpPzpW/SWvqMjb9QuHY8+J0M23V8EPY/zWU4IG8Ui0XESapR1CB49Q7g==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@biomejs/cli-linux-x64-musl@2.1.1': + resolution: {integrity: sha512-kUu+loNI3OCD2c12cUt7M5yaaSjDnGIksZwKnueubX6c/HWUyi/0mPbTBHR49Me3F0KKjWiKM+ZOjsmC+lUt9g==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@biomejs/cli-linux-x64@2.1.1': + resolution: {integrity: sha512-3WJ1GKjU7NzZb6RTbwLB59v9cTIlzjbiFLDB0z4376TkDqoNYilJaC37IomCr/aXwuU8QKkrYoHrgpSq5ffJ4Q==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@biomejs/cli-win32-arm64@2.1.1': + resolution: {integrity: sha512-vEHK0v0oW+E6RUWLoxb2isI3rZo57OX9ZNyyGH701fZPj6Il0Rn1f5DMNyCmyflMwTnIQstEbs7n2BxYSqQx4Q==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@2.1.1': + resolution: {integrity: sha512-i2PKdn70kY++KEF/zkQFvQfX1e8SkA8hq4BgC+yE9dZqyLzB/XStY2MvwI3qswlRgnGpgncgqe0QYKVS1blksg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + + '@emnapi/core@1.9.2': + resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + + '@emnapi/runtime@1.9.2': + resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] - /header-case@2.0.4: - resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} - dependencies: - capital-case: 1.0.4 - tslib: 2.6.2 - dev: true + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] - /hosted-git-info@7.0.2: - resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} - engines: {node: ^16.14.0 || >=18.0.0} - dependencies: - lru-cache: 10.2.2 + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - dev: true + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] - /http-call@5.3.0: - resolution: {integrity: sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==} - engines: {node: '>=8.0.0'} - dependencies: - content-type: 1.0.5 - debug: 4.3.5(supports-color@9.4.0) - is-retry-allowed: 1.2.0 - is-stream: 2.0.1 - parse-json: 4.0.0 - tunnel-agent: 0.6.0 - transitivePeerDependencies: - - supports-color - dev: true + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] - /http2-wrapper@2.2.1: - resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} - engines: {node: '>=10.19.0'} - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - dev: true + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] - /hyperlinker@1.0.0: - resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} - engines: {node: '>=4'} + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: false + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: false + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] - /ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] - /inquirer@9.2.23: - resolution: {integrity: sha512-kod5s+FBPIDM2xiy9fu+6wdU/SkK5le5GS9lh4FEBjBHqiMgD9lLFbCbuqFNAjNL2ZOy9Wd9F694IOzN9pZHBA==} + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} engines: {node: '>=18'} - dependencies: - '@inquirer/figures': 1.0.3 - '@ljharb/through': 2.3.13 - ansi-escapes: 4.3.2 - chalk: 5.3.0 - cli-cursor: 3.1.0 - cli-width: 4.1.0 - external-editor: 3.1.0 - lodash: 4.17.21 - mute-stream: 1.0.0 - ora: 5.4.1 - run-async: 3.0.0 - rxjs: 7.8.1 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - dev: false - - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 - dev: true + cpu: [x64] + os: [linux] - /interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} - dev: true + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - dev: true + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] - /is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 - dev: true + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.3.0 - dev: true + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: true + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - dependencies: - builtin-modules: 3.3.0 - dev: true + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - dependencies: - hasown: 2.0.2 - dev: true + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - dependencies: - is-typed-array: 1.1.13 - dev: true + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@oxc-project/types@0.124.0': + resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==} + + '@rolldown/binding-android-arm64@1.0.0-rc.15': + resolution: {integrity: sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-rc.15': + resolution: {integrity: sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true + '@rolldown/binding-darwin-x64@1.0.0-rc.15': + resolution: {integrity: sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true + '@rolldown/binding-freebsd-x64@1.0.0-rc.15': + resolution: {integrity: sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': + resolution: {integrity: sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': + resolution: {integrity: sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': + resolution: {integrity: sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': + resolution: {integrity: sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': + resolution: {integrity: sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': + resolution: {integrity: sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': + resolution: {integrity: sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': + resolution: {integrity: sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 + '@rolldown/pluginutils@1.0.0-rc.15': + resolution: {integrity: sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==} - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: false + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - dev: true + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - /is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - dev: true + '@types/node@18.19.130': + resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} - /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - dev: true + '@vitest/expect@4.1.4': + resolution: {integrity: sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww==} - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: true + '@vitest/mocker@4.1.4': + resolution: {integrity: sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true - /is-retry-allowed@1.2.0: - resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} - engines: {node: '>=0.10.0'} - dev: true + '@vitest/pretty-format@4.1.4': + resolution: {integrity: sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A==} - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - dev: true + '@vitest/runner@4.1.4': + resolution: {integrity: sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ==} - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + '@vitest/snapshot@4.1.4': + resolution: {integrity: sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw==} - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true + '@vitest/spy@4.1.4': + resolution: {integrity: sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ==} - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true + '@vitest/utils@4.1.4': + resolution: {integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==} - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.15 - dev: true + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.7 - dev: true + axios@1.15.0: + resolution: {integrity: sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==} - /is-what@4.1.16: - resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} - engines: {node: '>=12.13'} - dev: false + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} - /isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - dev: false + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} - /jake@10.9.1: - resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} - engines: {node: '>=10'} - hasBin: true - dependencies: - async: 3.2.5 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: true + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} - /jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - dev: true + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + es-module-lexer@2.0.0: + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} - /json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - dev: true + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} + hasBin: true - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: true + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} - /jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - optionalDependencies: - graceful-fs: 4.2.11 - dev: true + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - dependencies: - json-buffer: 3.0.1 - dev: true + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - dev: true + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} - /loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} - dependencies: - get-func-name: 2.0.2 - dev: true + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.6.2 - dev: true + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} - /lowercase-keys@3.0.0: - resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} - /lru-cache@10.2.2: - resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} - engines: {node: 14 || >=16.14} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] - /micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} - /mime-db@1.52.0: + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - dev: false - /mime-types@2.1.35: + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: false + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true - /mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - dev: true + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - /mimic-response@4.0.0: - resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} - /minimatch@5.0.1: - resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true + postcss@8.5.10: + resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} + engines: {node: ^10 || ^12 || >=14} - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true - - /minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - /mocha@10.4.0: - resolution: {integrity: sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==} - engines: {node: '>= 14.0.0'} + rolldown@1.0.0-rc.15: + resolution: {integrity: sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - dependencies: - ansi-colors: 4.1.1 - browser-stdout: 1.3.1 - chokidar: 3.5.3 - debug: 4.3.4(supports-color@8.1.1) - diff: 5.0.0 - escape-string-regexp: 4.0.0 - find-up: 5.0.0 - glob: 8.1.0 - he: 1.2.0 - js-yaml: 4.1.0 - log-symbols: 4.1.0 - minimatch: 5.0.1 - ms: 2.1.3 - serialize-javascript: 6.0.0 - strip-json-comments: 3.1.1 - supports-color: 8.1.1 - workerpool: 6.2.1 - yargs: 16.2.0 - yargs-parser: 20.2.4 - yargs-unparser: 2.0.0 - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true - - /mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true - - /natural-orderby@2.0.3: - resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==} - - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.6.2 - dev: true - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - dev: true - - /normalize-package-data@6.0.1: - resolution: {integrity: sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==} - engines: {node: ^16.14.0 || >=18.0.0} - dependencies: - hosted-git-info: 7.0.2 - is-core-module: 2.13.1 - semver: 7.6.2 - validate-npm-package-license: 3.0.4 - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - dev: true - /normalize-url@8.0.1: - resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} - engines: {node: '>=14.16'} - dev: true + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - /npm-package-arg@11.0.2: - resolution: {integrity: sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==} - engines: {node: ^16.14.0 || >=18.0.0} - dependencies: - hosted-git-info: 7.0.2 - proc-log: 4.2.0 - semver: 7.6.2 - validate-npm-package-name: 5.0.1 - dev: false - - /npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - path-key: 4.0.0 - dev: false + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} - /npm@10.8.1: - resolution: {integrity: sha512-Dp1C6SvSMYQI7YHq/y2l94uvI+59Eqbu1EpuKQHQ8p16txXRuRit5gH3Lnaagk2aXDIjg/Iru9pd05bnneKgdw==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - dev: false - bundledDependencies: - - '@isaacs/string-locale-compare' - - '@npmcli/arborist' - - '@npmcli/config' - - '@npmcli/fs' - - '@npmcli/map-workspaces' - - '@npmcli/package-json' - - '@npmcli/promise-spawn' - - '@npmcli/redact' - - '@npmcli/run-script' - - '@sigstore/tuf' - - abbrev - - archy - - cacache - - chalk - - ci-info - - cli-columns - - fastest-levenshtein - - fs-minipass - - glob - - graceful-fs - - hosted-git-info - - ini - - init-package-json - - is-cidr - - json-parse-even-better-errors - - libnpmaccess - - libnpmdiff - - libnpmexec - - libnpmfund - - libnpmhook - - libnpmorg - - libnpmpack - - libnpmpublish - - libnpmsearch - - libnpmteam - - libnpmversion - - make-fetch-happen - - minimatch - - minipass - - minipass-pipeline - - ms - - node-gyp - - nopt - - normalize-package-data - - npm-audit-report - - npm-install-checks - - npm-package-arg - - npm-pick-manifest - - npm-profile - - npm-registry-fetch - - npm-user-validate - - p-map - - pacote - - parse-conflict-json - - proc-log - - qrcode-terminal - - read - - semver - - spdx-expression-parse - - ssri - - supports-color - - tar - - text-table - - tiny-relative-date - - treeverse - - validate-npm-package-name - - which - - write-file-atomic - - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true - - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - /object-treeify@1.1.33: - resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} - engines: {node: '>= 10'} + tinyexec@1.1.1: + resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} + engines: {node: '>=18'} - /object-treeify@4.0.1: - resolution: {integrity: sha512-Y6tg5rHfsefSkfKujv2SwHulInROy/rCL5F4w0QOWxut8AnxYxf0YmNhTh95Zfyxpsudo66uqkux0ACFnyMSgQ==} - engines: {node: '>= 16'} - dev: false + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - - /object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - dev: true - - /object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - dev: true + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} + engines: {node: '>=14.0.0'} - /object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - /oclif@4.12.3(typescript@5.4.5): - resolution: {integrity: sha512-o4j5/n0LbI/OOasTiKSO4R2H+8NiG2Cn3nwVbp9GoSPfCZW7Tuup+xXNlh2/lURAYVD69Vx5XUs1PIY9QLgS5Q==} + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} engines: {node: '>=18.0.0'} hasBin: true - dependencies: - '@aws-sdk/client-cloudfront': 3.588.0 - '@aws-sdk/client-s3': 3.588.0 - '@inquirer/confirm': 3.1.9 - '@inquirer/input': 2.1.9 - '@inquirer/select': 2.3.5 - '@oclif/core': 4.0.0-beta.15(typescript@5.4.5) - '@oclif/plugin-help': 6.1.0(typescript@5.4.5) - '@oclif/plugin-not-found': 3.2.1(typescript@5.4.5) - '@oclif/plugin-warn-if-update-available': 3.1.3(typescript@5.4.5) - async-retry: 1.3.3 - chalk: 4.1.2 - change-case: 4.1.2 - debug: 4.3.5(supports-color@9.4.0) - ejs: 3.1.10 - find-yarn-workspace-root: 2.0.0 - fs-extra: 8.1.0 - github-slugger: 2.0.0 - got: 13.0.0 - lodash: 4.17.21 - normalize-package-data: 6.0.1 - semver: 7.6.2 - sort-package-json: 2.10.0 - tiny-jsonc: 1.0.1 - validate-npm-package-name: 5.0.1 - transitivePeerDependencies: - - aws-crt - - supports-color - - typescript - dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: false + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - /optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - dev: true - - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - dev: false - - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: false + vite@8.0.8: + resolution: {integrity: sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.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 + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.1.4: + resolution: {integrity: sha512-tFuJqTxKb8AvfyqMfnavXdzfy3h3sWZRWwfluGbkeR7n0HUev+FmNgZ8SDrRBTVrVCjgH5cA21qGbCffMNtWvg==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.4 + '@vitest/browser-preview': 4.1.4 + '@vitest/browser-webdriverio': 4.1.4 + '@vitest/coverage-istanbul': 4.1.4 + '@vitest/coverage-v8': 4.1.4 + '@vitest/ui': 4.1.4 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true - /p-cancelable@3.0.0: - resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} - engines: {node: '>=12.20'} - dev: true +snapshots: - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - dependencies: - p-try: 2.2.0 - dev: true + '@biomejs/biome@2.1.1': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 2.1.1 + '@biomejs/cli-darwin-x64': 2.1.1 + '@biomejs/cli-linux-arm64': 2.1.1 + '@biomejs/cli-linux-arm64-musl': 2.1.1 + '@biomejs/cli-linux-x64': 2.1.1 + '@biomejs/cli-linux-x64-musl': 2.1.1 + '@biomejs/cli-win32-arm64': 2.1.1 + '@biomejs/cli-win32-x64': 2.1.1 + + '@biomejs/cli-darwin-arm64@2.1.1': + optional: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true + '@biomejs/cli-darwin-x64@2.1.1': + optional: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - dependencies: - p-limit: 2.3.0 - dev: true + '@biomejs/cli-linux-arm64-musl@2.1.1': + optional: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true + '@biomejs/cli-linux-arm64@2.1.1': + optional: true - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + '@biomejs/cli-linux-x64-musl@2.1.1': + optional: true - /param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} - dependencies: - dot-case: 3.0.4 - tslib: 2.6.2 - dev: true + '@biomejs/cli-linux-x64@2.1.1': + optional: true - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 + '@biomejs/cli-win32-arm64@2.1.1': + optional: true - /parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} - dependencies: - error-ex: 1.3.2 - json-parse-better-errors: 1.0.2 - dev: true + '@biomejs/cli-win32-x64@2.1.1': + optional: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + '@emnapi/core@1.9.2': dependencies: - '@babel/code-frame': 7.24.6 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true - /pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + '@emnapi/runtime@1.9.2': dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - dev: true + tslib: 2.8.1 + optional: true - /password-prompt@1.1.3: - resolution: {integrity: sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==} + '@emnapi/wasi-threads@1.2.1': dependencies: - ansi-escapes: 4.3.2 - cross-spawn: 7.0.3 + tslib: 2.8.1 + optional: true - /path-case@3.0.4: - resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} - dependencies: - dot-case: 3.0.4 - tslib: 2.6.2 - dev: true + '@esbuild/aix-ppc64@0.27.7': + optional: true - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + '@esbuild/android-arm64@0.27.7': + optional: true - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + '@esbuild/android-arm@0.27.7': + optional: true - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + '@esbuild/android-x64@0.27.7': + optional: true - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: false + '@esbuild/darwin-arm64@0.27.7': + optional: true - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + '@esbuild/darwin-x64@0.27.7': + optional: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + '@esbuild/freebsd-arm64@0.27.7': + optional: true - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true + '@esbuild/freebsd-x64@0.27.7': + optional: true - /picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + '@esbuild/linux-arm64@0.27.7': + optional: true - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + '@esbuild/linux-arm@0.27.7': + optional: true - /pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - dev: true + '@esbuild/linux-ia32@0.27.7': + optional: true - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true + '@esbuild/linux-loong64@0.27.7': + optional: true - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + '@esbuild/linux-mips64el@0.27.7': + optional: true - /proc-log@4.2.0: - resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: false + '@esbuild/linux-ppc64@0.27.7': + optional: true - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false + '@esbuild/linux-riscv64@0.27.7': + optional: true - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true + '@esbuild/linux-s390x@0.27.7': + optional: true - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + '@esbuild/linux-x64@0.27.7': + optional: true - /quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - dev: true + '@esbuild/netbsd-arm64@0.27.7': + optional: true - /rambda@7.5.0: - resolution: {integrity: sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==} - dev: true + '@esbuild/netbsd-x64@0.27.7': + optional: true - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: true + '@esbuild/openbsd-arm64@0.27.7': + optional: true - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - dev: true + '@esbuild/openbsd-x64@0.27.7': + optional: true - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - dev: true - - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: false - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true + '@esbuild/openharmony-arm64@0.27.7': + optional: true - /rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} - engines: {node: '>= 0.10'} - dependencies: - resolve: 1.22.8 - dev: true + '@esbuild/sunos-x64@0.27.7': + optional: true - /redeyed@2.1.1: - resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} - dependencies: - esprima: 4.0.1 + '@esbuild/win32-arm64@0.27.7': + optional: true - /regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - dev: true + '@esbuild/win32-ia32@0.27.7': + optional: true - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - dev: true + '@esbuild/win32-x64@0.27.7': + optional: true - /regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true + '@jridgewell/sourcemap-codec@1.5.5': {} - /regjsparser@0.10.0: - resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} - hasBin: true + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': dependencies: - jsesc: 0.5.0 - dev: true + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@tybys/wasm-util': 0.10.1 + optional: true - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + '@oxc-project/types@0.124.0': {} - /resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - dev: true + '@rolldown/binding-android-arm64@1.0.0-rc.15': + optional: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + '@rolldown/binding-darwin-arm64@1.0.0-rc.15': + optional: true - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: true + '@rolldown/binding-darwin-x64@1.0.0-rc.15': + optional: true - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - - /responselike@3.0.0: - resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} - engines: {node: '>=14.16'} - dependencies: - lowercase-keys: 3.0.0 - dev: true + '@rolldown/binding-freebsd-x64@1.0.0-rc.15': + optional: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - dev: false - - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: true - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - dependencies: - glob: 7.2.3 - dev: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': + optional: true - /run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} - engines: {node: '>=0.12.0'} - dev: false + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': + optional: true - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': + optional: true - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - dependencies: - tslib: 2.6.2 + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': + optional: true - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - dev: true + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': + optional: true - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': + optional: true - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - dev: true + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + optional: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: false + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': + optional: true - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': + optional: true - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true + '@rolldown/pluginutils@1.0.0-rc.15': {} - /semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} - engines: {node: '>=10'} - hasBin: true + '@standard-schema/spec@1.1.0': {} - /sentence-case@3.0.4: - resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + '@tybys/wasm-util@0.10.1': dependencies: - no-case: 3.0.4 - tslib: 2.6.2 - upper-case-first: 2.0.2 - dev: true + tslib: 2.8.1 + optional: true - /serialize-javascript@6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + '@types/chai@5.2.3': dependencies: - randombytes: 2.1.0 - dev: true + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 + '@types/deep-eql@4.0.2': {} - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - dev: true + '@types/estree@1.0.8': {} - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + '@types/node@18.19.130': dependencies: - shebang-regex: 3.0.0 + undici-types: 5.26.5 - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + '@vitest/expect@4.1.4': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.4 + '@vitest/utils': 4.1.4 + chai: 6.2.2 + tinyrainbow: 3.1.0 - /shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} - engines: {node: '>=4'} - hasBin: true + '@vitest/mocker@4.1.4(vite@8.0.8(@types/node@18.19.130)(esbuild@0.27.7)(tsx@4.21.0))': dependencies: - glob: 7.2.3 - interpret: 1.4.0 - rechoir: 0.6.2 - dev: true - - /shx@0.3.4: - resolution: {integrity: sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==} - engines: {node: '>=6'} - hasBin: true + '@vitest/spy': 4.1.4 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.0.8(@types/node@18.19.130)(esbuild@0.27.7)(tsx@4.21.0) + + '@vitest/pretty-format@4.1.4': dependencies: - minimist: 1.2.8 - shelljs: 0.8.5 - dev: true + tinyrainbow: 3.1.0 - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + '@vitest/runner@4.1.4': dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.1 - dev: true + '@vitest/utils': 4.1.4 + pathe: 2.0.3 - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: false + '@vitest/snapshot@4.1.4': + dependencies: + '@vitest/pretty-format': 4.1.4 + '@vitest/utils': 4.1.4 + magic-string: 0.30.21 + pathe: 2.0.3 - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true + '@vitest/spy@4.1.4': {} - /simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + '@vitest/utils@4.1.4': dependencies: - is-arrayish: 0.3.2 + '@vitest/pretty-format': 4.1.4 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + assertion-error@2.0.1: {} - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true + asynckit@0.4.0: {} - /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} + axios@1.15.0: dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - - /slugify@1.6.6: - resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} - engines: {node: '>=8.0.0'} - dev: false + follow-redirects: 1.16.0 + form-data: 4.0.5 + proxy-from-env: 2.1.0 + transitivePeerDependencies: + - debug - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + call-bind-apply-helpers@1.0.2: dependencies: - dot-case: 3.0.4 - tslib: 2.6.2 - dev: true + es-errors: 1.3.0 + function-bind: 1.1.2 - /sort-object-keys@1.1.3: - resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} - dev: true + chai@6.2.2: {} - /sort-package-json@2.10.0: - resolution: {integrity: sha512-MYecfvObMwJjjJskhxYfuOADkXp1ZMMnCFC8yhp+9HDsk7HhR336hd7eiBs96lTXfiqmUNI+WQCeCMRBhl251g==} - hasBin: true - dependencies: - detect-indent: 7.0.1 - detect-newline: 4.0.1 - get-stdin: 9.0.0 - git-hooks-list: 3.1.0 - globby: 13.2.2 - is-plain-obj: 4.1.0 - semver: 7.6.2 - sort-object-keys: 1.1.3 - dev: true - - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + chalk@5.6.2: {} + + combined-stream@1.0.8: dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.18 - dev: true + delayed-stream: 1.0.0 - /spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - dev: true + commander@13.1.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.18 - dev: true + convert-source-map@2.0.0: {} - /spdx-license-ids@3.0.18: - resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} - dev: true + delayed-stream@1.0.0: {} - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + detect-libc@2.1.2: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + dunder-proto@1.0.1: dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - dev: true - - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true + es-define-property@1.0.1: {} - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true + es-errors@1.3.0: {} - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - dependencies: - safe-buffer: 5.2.1 - dev: false + es-module-lexer@2.0.0: {} - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + es-object-atoms@1.1.1: dependencies: - ansi-regex: 5.0.1 - - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + es-errors: 1.3.0 - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + es-set-tostringtag@2.1.0: dependencies: - min-indent: 1.0.1 - dev: true + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + 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 + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + expect-type@1.3.0: {} + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 - /strnum@1.0.5: - resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} - dev: true + follow-redirects@1.16.0: {} - /superjson@2.2.1: - resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} - engines: {node: '>=16'} + form-data@4.0.5: dependencies: - copy-anything: 3.0.5 - dev: false + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 + fsevents@2.3.3: + optional: true - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 + function-bind@1.1.2: {} - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + get-intrinsic@1.3.0: dependencies: - has-flag: 4.0.0 - - /supports-color@9.4.0: - resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} - engines: {node: '>=12'} + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 - /supports-hyperlinks@2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} - engines: {node: '>=8'} + get-proto@1.0.1: dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true - - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + get-tsconfig@4.14.0: + dependencies: + resolve-pkg-maps: 1.0.0 - /tiny-jsonc@1.0.1: - resolution: {integrity: sha512-ik6BCxzva9DoiEfDX/li0L2cWKPPENYvixUprFdl3YPi4bZZUhDnNI9YUkacrv+uIG90dnxR5mNqaoD6UhD6Bw==} - dev: true + gopd@1.2.0: {} - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - dependencies: - os-tmpdir: 1.0.2 - dev: false + has-symbols@1.1.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + has-tostringtag@1.0.2: dependencies: - is-number: 7.0.0 + has-symbols: 1.1.0 - /ts-api-utils@1.3.0(typescript@5.4.5): - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' + hasown@2.0.2: dependencies: - typescript: 5.4.5 - dev: true + function-bind: 1.1.2 - /ts-node@10.9.2(@types/node@18.19.34)(typescript@5.4.5): - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 18.19.34 - acorn: 8.11.3 - acorn-walk: 8.3.2 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.4.5 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true - - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - dev: true + lightningcss-android-arm64@1.32.0: + optional: true - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true + lightningcss-darwin-arm64@1.32.0: + optional: true - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + lightningcss-darwin-x64@1.32.0: + optional: true - /tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - dependencies: - safe-buffer: 5.2.1 - dev: true + lightningcss-freebsd-x64@1.32.0: + optional: true - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - dev: true + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true + lightningcss-linux-arm64-gnu@1.32.0: + optional: true - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + lightningcss-linux-arm64-musl@1.32.0: + optional: true - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} + lightningcss-linux-x64-gnu@1.32.0: + optional: true - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true + lightningcss-linux-x64-musl@1.32.0: + optional: true - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true + lightningcss-win32-arm64-msvc@1.32.0: + optional: true - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - dev: true + lightningcss-win32-x64-msvc@1.32.0: + optional: true - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - dev: true - - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - dev: true - - /typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} + lightningcss@1.32.0: dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - dev: true - - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} - engines: {node: '>=14.17'} - hasBin: true + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + magic-string@0.30.21: dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: true + '@jridgewell/sourcemap-codec': 1.5.5 - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + math-intrinsics@1.1.0: {} - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true + mime-db@1.52.0: {} - /upper-case-first@2.0.2: - resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + mime-types@2.1.35: dependencies: - tslib: 2.6.2 - dev: true + mime-db: 1.52.0 - /upper-case@2.0.2: - resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} - dependencies: - tslib: 2.6.2 - dev: true + nanoid@3.3.11: {} - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - dev: true + obug@2.1.1: {} - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false + pathe@2.0.3: {} - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - dev: true + picocolors@1.1.1: {} - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true + picomatch@4.0.4: {} - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + postcss@8.5.10: dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - dev: true + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 - /validate-npm-package-name@5.0.1: - resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + proxy-from-env@2.1.0: {} - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - dependencies: - defaults: 1.0.4 - dev: false + resolve-pkg-maps@1.0.0: {} - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + rolldown@1.0.0-rc.15: dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: true - - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - dev: true + '@oxc-project/types': 0.124.0 + '@rolldown/pluginutils': 1.0.0-rc.15 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.15 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.15 + '@rolldown/binding-darwin-x64': 1.0.0-rc.15 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.15 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.15 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.15 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.15 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.15 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.15 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.15 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.15 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.15 - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 + siginfo@2.0.0: {} - /which@4.0.0: - resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} - engines: {node: ^16.13.0 || >=18.0.0} - hasBin: true - dependencies: - isexe: 3.1.1 - dev: false + source-map-js@1.2.1: {} - /widest-line@3.1.0: - resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} - engines: {node: '>=8'} - dependencies: - string-width: 4.2.3 + stackback@0.0.2: {} - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - dev: true + std-env@4.1.0: {} - /wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + tinybench@2.9.0: {} - /workerpool@6.2.1: - resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} - dev: true + tinyexec@1.1.1: {} - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + tinyglobby@0.2.16: dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 + tinyrainbow@3.1.0: {} - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + tslib@2.8.1: + optional: true - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + tsx@4.21.0: + dependencies: + esbuild: 0.27.7 + get-tsconfig: 4.14.0 + optionalDependencies: + fsevents: 2.3.3 - /yargs-parser@20.2.4: - resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} - engines: {node: '>=10'} - dev: true + typescript@5.9.3: {} - /yargs-unparser@2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} - dependencies: - camelcase: 6.3.0 - decamelize: 4.0.0 - flat: 5.0.2 - is-plain-obj: 2.1.0 - dev: true - - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.2 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.4 - dev: true - - /yarn@1.22.22: - resolution: {integrity: sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg==} - engines: {node: '>=4.0.0'} - hasBin: true - requiresBuild: true - dev: false + undici-types@5.26.5: {} - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true + vite@8.0.8(@types/node@18.19.130)(esbuild@0.27.7)(tsx@4.21.0): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.10 + rolldown: 1.0.0-rc.15 + tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 18.19.130 + esbuild: 0.27.7 + fsevents: 2.3.3 + tsx: 4.21.0 + + vitest@4.1.4(@types/node@18.19.130)(vite@8.0.8(@types/node@18.19.130)(esbuild@0.27.7)(tsx@4.21.0)): + dependencies: + '@vitest/expect': 4.1.4 + '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@18.19.130)(esbuild@0.27.7)(tsx@4.21.0)) + '@vitest/pretty-format': 4.1.4 + '@vitest/runner': 4.1.4 + '@vitest/snapshot': 4.1.4 + '@vitest/spy': 4.1.4 + '@vitest/utils': 4.1.4 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.1.1 + tinyglobby: 0.2.16 + tinyrainbow: 3.1.0 + vite: 8.0.8(@types/node@18.19.130)(esbuild@0.27.7)(tsx@4.21.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 18.19.130 + transitivePeerDependencies: + - msw - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 diff --git a/readme.md b/readme.md index d4cc848..886366f 100644 --- a/readme.md +++ b/readme.md @@ -1,123 +1,136 @@ # Dokploy CLI - - -Dokploy CLI is a powerful and versatile command-line tool designed to remotely manage your Dokploy server. It simplifies the process of creating, deploying, and managing applications and databases. - - - -## Table of Contents - -- [Installation](#installation) -- [Usage](#usage) -- [Commands](#commands) - - [Authentication](#authentication) - - [Project Management](#project-management) - - [Application Management](#application-management) - - [Environment Management](#environment-management) - - [Database Management](#database-management) -- [Contributing](#contributing) -- [Support](#support) -- [License](#license) +Dokploy CLI is a command-line tool to manage your Dokploy server remotely. It provides **449 commands** auto-generated from the Dokploy OpenAPI spec, covering every API endpoint. ## Installation -```sh-session -$ npm install -g @dokploy/cli +```bash +npm install -g @dokploy/cli ``` -## Usage - -```sh-session -$ dokploy COMMAND -running command... +## Authentication -$ dokploy --version -dokploy/0.0.0 darwin-arm64 node-v18.18.0 +### Option 1: Using the `auth` command -$ dokploy --help [COMMAND] -USAGE - $ dokploy COMMAND -... +```bash +dokploy auth -u https://panel.dokploy.com -t YOUR_API_KEY ``` -## Commands +### Option 2: Environment variables -### Authentication - -- `dokploy authenticate`: Authenticate with the Dokploy server. -- `dokploy verify`: Verify current authentication. +```bash +export DOKPLOY_URL="https://panel.dokploy.com" +export DOKPLOY_API_KEY="YOUR_API_KEY" +``` -### Project Management +### Option 3: `.env` file -- `dokploy project:create`: Create a new project. -- `dokploy project:info`: Get information about an existing project. -- `dokploy project:list`: List all projects. +Create a `.env` file in your working directory: -### Environment Management +```env +DOKPLOY_URL="https://panel.dokploy.com" +DOKPLOY_API_KEY="YOUR_API_KEY" +``` -- `dokploy environment:create`: Create a new environment. -- `dokploy environment:delete`: Delete an existing environment. +The CLI loads it automatically. Shell environment variables take priority over the `.env` file. -### Application Management +## Usage -- `dokploy app:create`: Create a new application. -- `dokploy app:delete`: Delete an existing application. -- `dokploy app:deploy`: Deploy an application. -- `dokploy app:stop`: Stop a running application. +```bash +dokploy [options] +``` -### Enviroment Management +### Examples -- `dokploy env pull `: Pull environment variables from Dokploy in a . -- `dokploy env push `: Push environment variables to Dokploy from a . +```bash +# List all projects +dokploy project all -### Database Management +# Get a specific project +dokploy project one --projectId abc123 -Dokploy supports various types of databases: +# Create an application +dokploy application create --name "my-app" --environmentId env123 -#### MariaDB +# Deploy an application +dokploy application deploy --applicationId app123 -- `dokploy database:mariadb:create` -- `dokploy database:mariadb:delete` -- `dokploy database:mariadb:deploy` -- `dokploy database:mariadb:stop` +# Create a postgres database +dokploy postgres create --name "my-db" --environmentId env123 -#### MongoDB +# Stop a database +dokploy postgres stop --postgresId pg123 -- `dokploy database:mongo:create` -- `dokploy database:mongo:delete` -- `dokploy database:mongo:deploy` -- `dokploy database:mongo:stop` +# Get raw JSON output +dokploy project all --json +``` -#### MySQL +### Getting help -- `dokploy database:mysql:create` -- `dokploy database:mysql:delete` -- `dokploy database:mysql:deploy` -- `dokploy database:mysql:stop` +```bash +# List all groups +dokploy --help -#### PostgreSQL +# List actions in a group +dokploy application --help -- `dokploy database:postgres:create` -- `dokploy database:postgres:delete` -- `dokploy database:postgres:deploy` -- `dokploy database:postgres:stop` +# See options for a specific action +dokploy application deploy --help +``` -#### Redis +## Available command groups + +| Group | Commands | Group | Commands | +|---|---|---|---| +| `admin` | 1 | `notification` | 38 | +| `ai` | 9 | `organization` | 10 | +| `application` | 29 | `patch` | 12 | +| `backup` | 11 | `port` | 4 | +| `bitbucket` | 7 | `postgres` | 14 | +| `certificates` | 4 | `preview-deployment` | 4 | +| `cluster` | 4 | `project` | 8 | +| `compose` | 28 | `redirects` | 4 | +| `deployment` | 8 | `redis` | 14 | +| `destination` | 6 | `registry` | 7 | +| `docker` | 7 | `rollback` | 2 | +| `domain` | 9 | `schedule` | 6 | +| `environment` | 7 | `security` | 4 | +| `gitea` | 8 | `server` | 16 | +| `github` | 6 | `settings` | 49 | +| `gitlab` | 7 | `ssh-key` | 6 | +| `git-provider` | 2 | `sso` | 10 | +| `license-key` | 6 | `stripe` | 7 | +| `mariadb` | 14 | `swarm` | 3 | +| `mongo` | 14 | `user` | 18 | +| `mounts` | 6 | `volume-backups` | 6 | +| `mysql` | 14 | | | + +## Development + +```bash +# Install dependencies +pnpm install + +# Run in dev mode +pnpm run dev -- project all + +# Regenerate commands from OpenAPI spec +pnpm run generate + +# Build +pnpm run build + +# Lint & format +pnpm run lint +``` -- `dokploy database:redis:create` -- `dokploy database:redis:delete` -- `dokploy database:redis:deploy` -- `dokploy database:redis:stop` +### Updating commands -For more information about a specific command, use: +Commands are auto-generated from `openapi.json`. To update: -```sh-session -$ dokploy [COMMAND] --help -``` +1. Replace `openapi.json` with the latest spec from the [Dokploy repo](https://github.com/Dokploy/dokploy) +2. Run `pnpm run generate` +3. Build with `pnpm run build` ## Contributing @@ -125,7 +138,7 @@ If you want to contribute to Dokploy CLI, please check out our [Contributing Gui ## Support -If you encounter any issues or have any questions, please [open an issue](https://github.com/yourusername/dokploy/issues) in our GitHub repository. +If you encounter any issues or have any questions, please [open an issue](https://github.com/Dokploy/cli/issues) in our GitHub repository. ## License diff --git a/scripts/generate.ts b/scripts/generate.ts new file mode 100644 index 0000000..14693be --- /dev/null +++ b/scripts/generate.ts @@ -0,0 +1,286 @@ +/** + * Generates CLI commands from the Dokploy OpenAPI spec. + * + * Usage: npx tsx scripts/generate.ts + * + * Reads openapi.json from the project root and generates: + * - src/generated/commands.ts (all CLI commands) + */ + +import * as fs from "node:fs"; +import * as path from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.resolve(__dirname, ".."); +const SPEC_PATH = path.join(ROOT, "openapi.json"); +const OUT_PATH = path.join(ROOT, "src", "generated", "commands.ts"); + +interface OpenAPISpec { + paths: Record>; +} + +interface OperationObject { + operationId?: string; + summary?: string; + description?: string; + tags?: string[]; + parameters?: ParameterObject[]; + requestBody?: { + content?: { + "application/json"?: { + schema?: SchemaObject; + }; + }; + }; + responses?: Record; +} + +interface ParameterObject { + name: string; + in: string; + required?: boolean; + schema?: SchemaObject; +} + +interface SchemaObject { + type?: string; + properties?: Record; + required?: string[]; + anyOf?: SchemaObject[]; + items?: SchemaObject; + enum?: string[]; +} + +interface SchemaProperty { + type?: string; + anyOf?: SchemaObject[]; + enum?: string[]; + default?: unknown; + description?: string; +} + +interface CommandInfo { + /** e.g. "application.create" */ + endpoint: string; + /** e.g. "application" */ + group: string; + /** e.g. "create" */ + action: string; + method: "get" | "post"; + description: string; + options: OptionInfo[]; +} + +interface OptionInfo { + name: string; + flag: string; + description: string; + required: boolean; + type: "string" | "number" | "boolean"; + enumValues?: string[]; +} + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +function resolveType(prop: SchemaProperty): "string" | "number" | "boolean" { + const raw = prop.type ?? prop.anyOf?.find((s) => s.type && s.type !== "null")?.type; + if (raw === "number" || raw === "integer") return "number"; + if (raw === "boolean") return "boolean"; + return "string"; +} + +function resolveEnum(prop: SchemaProperty): string[] | undefined { + if (prop.enum) return prop.enum; + const inner = prop.anyOf?.find((s) => s.enum); + return inner?.enum; +} + +function extractOptionsFromSchema(schema: SchemaObject | undefined): OptionInfo[] { + if (!schema?.properties) return []; + const required = new Set(schema.required ?? []); + return Object.entries(schema.properties).map(([name, prop]) => { + const type = resolveType(prop); + const enumValues = resolveEnum(prop); + let desc = prop.description ?? name; + if (enumValues) desc += ` (${enumValues.join(", ")})`; + return { + name, + flag: `--${name} <${type === "boolean" ? "" : "value"}>`.replace(/ <>/g, ""), + description: desc, + required: required.has(name), + type, + enumValues, + }; + }); +} + +function extractOptionsFromParams(params: ParameterObject[]): OptionInfo[] { + return params.map((p) => { + const type = resolveType(p.schema ?? {}); + const enumValues = resolveEnum(p.schema ?? {}); + let desc = p.name; + if (enumValues) desc += ` (${enumValues.join(", ")})`; + return { + name: p.name, + flag: `--${p.name} <${type === "boolean" ? "" : "value"}>`.replace(/ <>/g, ""), + description: desc, + required: p.required ?? false, + type, + enumValues, + }; + }); +} + +function camelToKebab(s: string): string { + return s.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase(); +} + +// --------------------------------------------------------------------------- +// Parse spec → CommandInfo[] +// --------------------------------------------------------------------------- + +function parseSpec(spec: OpenAPISpec): CommandInfo[] { + const commands: CommandInfo[] = []; + + for (const [pathKey, methods] of Object.entries(spec.paths)) { + for (const [method, op] of Object.entries(methods)) { + const endpoint = pathKey.replace(/^\//, ""); + const [group, ...rest] = endpoint.split("."); + const action = rest.join("."); + + if (!group || !action) continue; + + const bodySchema = op.requestBody?.content?.["application/json"]?.schema; + const paramOptions = op.parameters ? extractOptionsFromParams(op.parameters) : []; + const bodyOptions = extractOptionsFromSchema(bodySchema); + const options = [...paramOptions, ...bodyOptions]; + + commands.push({ + endpoint, + group, + action, + method: method as "get" | "post", + description: op.summary ?? op.description ?? `${group} ${action}`, + options, + }); + } + } + + return commands.sort((a, b) => a.endpoint.localeCompare(b.endpoint)); +} + +// --------------------------------------------------------------------------- +// Code generation +// --------------------------------------------------------------------------- + +function generateOptionLine(opt: OptionInfo): string { + const flag = opt.type === "boolean" + ? `--${opt.name}` + : `--${opt.name} `; + const escaped = opt.description.replace(/'/g, "\\'"); + return opt.required + ? `.requiredOption('${flag}', '${escaped}')` + : `.option('${flag}', '${escaped}')`; +} + +function generateCoercion(opt: OptionInfo): string { + if (opt.type === "number") { + return `if (opts["${opt.name}"] != null) opts["${opt.name}"] = Number(opts["${opt.name}"]);`; + } + if (opt.type === "boolean") { + return `if (opts["${opt.name}"] != null) opts["${opt.name}"] = opts["${opt.name}"] === true || opts["${opt.name}"] === "true";`; + } + return ""; +} + +function generateCommandCode(cmd: CommandInfo, groupVar: string): string { + const actionName = camelToKebab(cmd.action); + const optionLines = cmd.options.map(generateOptionLine).join("\n\t\t"); + const coercions = cmd.options + .map(generateCoercion) + .filter(Boolean) + .map((c) => `\t\t\t${c}`) + .join("\n"); + + const apiCall = cmd.method === "post" + ? `await apiPost("${cmd.endpoint}", opts)` + : `await apiGet("${cmd.endpoint}", opts)`; + + const escapedDesc = cmd.description.replace(/'/g, "\\'"); + + return ` + ${groupVar} + .command('${actionName}') + .description('${escapedDesc}') + ${optionLines} + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; +${coercions} + const data = ${apiCall}; + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + });`; +} + +function generateFile(commands: CommandInfo[]): string { + // Group commands by their group name + const groups = new Map(); + for (const cmd of commands) { + const existing = groups.get(cmd.group) ?? []; + existing.push(cmd); + groups.set(cmd.group, existing); + } + + const groupBlocks: string[] = []; + for (const [group, cmds] of [...groups.entries()].sort((a, b) => a[0].localeCompare(b[0]))) { + const varName = `g_${group.replace(/[^a-zA-Z0-9]/g, "_")}`; + const kebabGroup = camelToKebab(group); + groupBlocks.push(`\tconst ${varName} = program.command('${kebabGroup}').description('${kebabGroup} commands');`); + for (const cmd of cmds) { + groupBlocks.push(generateCommandCode(cmd, varName)); + } + } + + return `// Auto-generated from openapi.json — do not edit manually. +// Run: npx tsx scripts/generate.ts + +import type { Command } from "commander"; +import chalk from "chalk"; +import { apiPost, apiGet } from "../client.js"; + +function printOutput(data: unknown) { + if (data === null || data === undefined) { + console.log(chalk.green("OK")); + return; + } + if (typeof data === "string") { + console.log(data); + return; + } + console.log(JSON.stringify(data, null, 2)); +} + +export function registerGeneratedCommands(program: Command) { +${groupBlocks.join("\n")} +} +`; +} + +// --------------------------------------------------------------------------- +// Main +// --------------------------------------------------------------------------- + +const spec: OpenAPISpec = JSON.parse(fs.readFileSync(SPEC_PATH, "utf8")); +const commands = parseSpec(spec); + +fs.mkdirSync(path.dirname(OUT_PATH), { recursive: true }); +fs.writeFileSync(OUT_PATH, generateFile(commands)); + +console.log(`Generated ${commands.length} commands → ${path.relative(ROOT, OUT_PATH)}`); diff --git a/src/client.ts b/src/client.ts new file mode 100644 index 0000000..dc31d14 --- /dev/null +++ b/src/client.ts @@ -0,0 +1,106 @@ +import * as fs from "node:fs"; +import * as path from "node:path"; +import { fileURLToPath } from "node:url"; +import axios, { type AxiosInstance } from "axios"; +import chalk from "chalk"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const configPath = path.join(__dirname, "..", "config.json"); + +export interface AuthConfig { + token: string; + url: string; +} + +function loadEnvFile(): void { + const envPath = path.resolve(process.cwd(), ".env"); + if (!fs.existsSync(envPath)) return; + + const content = fs.readFileSync(envPath, "utf8"); + for (const line of content.split("\n")) { + const trimmed = line.trim(); + if (!trimmed || trimmed.startsWith("#")) continue; + const eqIndex = trimmed.indexOf("="); + if (eqIndex === -1) continue; + const key = trimmed.slice(0, eqIndex).trim(); + const value = trimmed.slice(eqIndex + 1).trim().replace(/^["']|["']$/g, ""); + if (!process.env[key]) { + process.env[key] = value; + } + } +} + +export function readAuthConfig(): AuthConfig { + loadEnvFile(); + + const envToken = + process.env.DOKPLOY_API_KEY ?? process.env.DOKPLOY_AUTH_TOKEN; + const envUrl = process.env.DOKPLOY_URL; + + if (envToken && envUrl) { + return { token: envToken, url: envUrl }; + } + + if (!fs.existsSync(configPath)) { + console.error( + chalk.red( + "No configuration found. Please run 'dokploy auth' first or set DOKPLOY_URL and DOKPLOY_AUTH_TOKEN environment variables.", + ), + ); + process.exit(1); + } + + const config = JSON.parse(fs.readFileSync(configPath, "utf8")); + const { token, url } = config; + + if (!url || !token) { + console.error( + chalk.red( + "Incomplete auth config. Run 'dokploy auth' or set environment variables.", + ), + ); + process.exit(1); + } + + return { token, url }; +} + +export function saveAuthConfig(url: string, token: string): void { + fs.writeFileSync(configPath, JSON.stringify({ url, token }, null, 2)); +} + +export function createClient(): AxiosInstance { + const auth = readAuthConfig(); + return axios.create({ + baseURL: `${auth.url}/api`, + headers: { + "x-api-key": auth.token, + "Content-Type": "application/json", + }, + }); +} + +export async function apiPost( + endpoint: string, + data?: Record, +) { + const client = createClient(); + const response = await client.post( + `/trpc/${endpoint}`, + data ? { json: data } : undefined, + ); + return response.data?.result?.data?.json ?? response.data; +} + +export async function apiGet( + endpoint: string, + params?: Record, +) { + const client = createClient(); + const query = params + ? `?input=${encodeURIComponent(JSON.stringify(params))}` + : ""; + const response = await client.get(`/trpc/${endpoint}${query}`); + return response.data?.result?.data?.json ?? response.data; +} diff --git a/src/commands/app/create.ts b/src/commands/app/create.ts deleted file mode 100644 index 40b77c7..0000000 --- a/src/commands/app/create.ts +++ /dev/null @@ -1,182 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import inquirer from "inquirer"; - -import { type Project, getProjects } from "../../utils/shared.js"; -import { slugify } from "../../utils/slug.js"; -import { readAuthConfig } from "../../utils/utils.js"; - -export interface Answers { - project: Project; -} - -export default class AppCreate extends Command { - static description = "Create a new application within a project."; - - static examples = ["$ <%= config.bin %> app create"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - name: Flags.string({ - char: "n", - description: "Application name", - required: false, - }), - description: Flags.string({ - char: "d", - description: "Application description", - required: false, - }), - appName: Flags.string({ - description: "Docker app name", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(AppCreate); - let { projectId, environmentId, name, description, appName } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !name || !appName) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to create the application in:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - environmentId = environment.environmentId; - } - - if (!name || !appName) { - const appDetails = await inquirer.prompt([ - { - message: "Enter the application name:", - name: "name", - type: "input", - validate: (input) => (input ? true : "Application name is required"), - default: name, - }, - { - message: "Enter the application description (optional):", - name: "appDescription", - type: "input", - default: description, - }, - ]); - - name = appDetails.name; - description = appDetails.appDescription; - - const appNamePrompt = await inquirer.prompt([ - { - default: appName || `${slugify(name)}`, - message: "Enter the App name:", - name: "appName", - type: "input", - validate: (input) => (input ? true : "App name is required"), - }, - ]); - - appName = appNamePrompt.appName; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirm = await inquirer.prompt([ - { - type: 'confirm', - name: 'proceed', - message: 'Do you want to create this application?', - default: false, - }, - ]); - - if (!confirm.proceed) { - this.error(chalk.yellow("Application creation cancelled.")); - return; - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/application.create`, - { - json: { - name, - appDescription: description, - appName, - projectId, - environmentId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (response.status !== 200) { - this.error(chalk.red("Error creating application")); - } - - this.log(chalk.green(`Application '${name}' created successfully.`)); - } catch (error: any) { - this.error(chalk.red(`Error creating application: ${error.message}`)); - } - } -} diff --git a/src/commands/app/delete.ts b/src/commands/app/delete.ts deleted file mode 100644 index af2a87b..0000000 --- a/src/commands/app/delete.ts +++ /dev/null @@ -1,158 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import inquirer from "inquirer"; - -import { getProject, getProjects, type Application } from "../../utils/shared.js"; -import { readAuthConfig } from "../../utils/utils.js"; -import type { Answers } from "./create.js"; - -export default class AppDelete extends Command { - static description = "Delete an application from a project."; - - static examples = [ - "$ <%= config.bin %> app delete", - "$ <%= config.bin %> app delete -p ", - ]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - applicationId: Flags.string({ - char: 'a', - description: 'ID of the application to delete', - required: false, - }), - skipConfirm: Flags.boolean({ - char: 'y', - description: 'Skip confirmation prompt', - default: false, - }) - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(AppDelete); - let { projectId, environmentId, applicationId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !applicationId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to delete the application from:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar application del environment - if (!applicationId) { - if (!selectedEnvironment?.applications || selectedEnvironment.applications.length === 0) { - this.error(chalk.yellow("No applications found in this environment.")); - } - - const appAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.applications.map((app: Application) => ({ - name: app.name, - value: app.applicationId, - })), - message: "Select the application to delete:", - name: "selectedApp", - type: "list", - }, - ]); - applicationId = appAnswers.selectedApp; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to delete this application?", - name: "confirmDelete", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmDelete) { - this.error(chalk.yellow("Application deletion cancelled.")); - } - } - - try { - const deleteResponse = await axios.post( - `${auth.url}/api/trpc/application.delete`, - { - json: { - applicationId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (!deleteResponse.data.result.data.json) { - this.error(chalk.red("Error deleting application")); - } - - this.log(chalk.green("Application deleted successfully.")); - } catch (error: any) { - this.error(chalk.red(`Failed to delete application: ${error.message}`)); - } - } -} diff --git a/src/commands/app/deploy.ts b/src/commands/app/deploy.ts deleted file mode 100644 index 479f7f0..0000000 --- a/src/commands/app/deploy.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import { readAuthConfig } from "../../utils/utils.js"; -import chalk from "chalk"; -import { getProject, getProjects, type Application } from "../../utils/shared.js"; -import inquirer from "inquirer"; -import type { Answers } from "./create.js"; -import axios from "axios"; - -export default class AppDeploy extends Command { - static description = "Deploy an application to a project."; - - static examples = [ - "$ <%= config.bin %> app deploy", - "$ <%= config.bin %> app deploy --applicationId myAppId", - "$ DOKPLOY_URL=xxx DOKPLOY_AUTH_TOKEN=xxx <%= config.bin %> app deploy --applicationId myAppId" - ]; - - static flags = { - applicationId: Flags.string({ - char: 'a', - description: 'ID of the application to deploy', - required: false, - }), - projectId: Flags.string({ - char: 'p', - description: 'ID of the project', - required: false, - }), - environmentId: Flags.string({ - char: 'e', - description: 'ID of the environment', - required: false, - }), - skipConfirm: Flags.boolean({ - char: 'y', - description: 'Skip confirmation prompt', - default: false, - }) - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(AppDeploy); - let { projectId, applicationId, environmentId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !applicationId || !environmentId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to deploy the application from:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar application del environment - if (!applicationId) { - if (!selectedEnvironment?.applications || selectedEnvironment.applications.length === 0) { - this.error(chalk.yellow("No applications found in this environment.")); - } - - const appAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.applications.map((app: Application) => ({ - name: app.name, - value: app.applicationId, - })), - message: "Select the application to deploy:", - name: "selectedApp", - type: "list", - }, - ]); - applicationId = appAnswers.selectedApp; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to deploy this application?", - name: "confirmDelete", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmDelete) { - this.error(chalk.yellow("Application deployment cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/application.deploy`, - { - json: { - applicationId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (response.status !== 200) { - this.error(chalk.red("Error deploying application")); - } - this.log(chalk.green("Application deploy successful.")); - } catch (error: any) { - this.error(chalk.red(`Error deploying application: ${error.message}`)); - } - } -} diff --git a/src/commands/app/stop.ts b/src/commands/app/stop.ts deleted file mode 100644 index b642e24..0000000 --- a/src/commands/app/stop.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import { readAuthConfig } from "../../utils/utils.js"; -import chalk from "chalk"; -import inquirer from "inquirer"; -import { getProject, getProjects, type Application } from "../../utils/shared.js"; -import type { Answers } from "./create.js"; -import axios from "axios"; - -export default class AppStop extends Command { - static description = "Stop an application from a project."; - - static examples = ["$ <%= config.bin %> app stop"]; - - static flags = { - projectId: Flags.string({ - char: 'p', - description: 'ID of the project', - required: false, - }), - environmentId: Flags.string({ - char: 'e', - description: 'ID of the environment', - required: false, - }), - applicationId: Flags.string({ - char: 'a', - description: 'ID of the application to stop', - required: false, - }), - skipConfirm: Flags.boolean({ - char: 'y', - description: 'Skip confirmation prompt', - default: false, - }) - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(AppStop); - let { projectId, environmentId, applicationId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !applicationId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to stop the application from:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar application del environment - if (!applicationId) { - if (!selectedEnvironment?.applications || selectedEnvironment.applications.length === 0) { - this.error(chalk.yellow("No applications found in this environment.")); - } - - const appAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.applications.map((app: Application) => ({ - name: app.name, - value: app.applicationId, - })), - message: "Select the application to stop:", - name: "selectedApp", - type: "list", - }, - ]); - applicationId = appAnswers.selectedApp; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to stop this application?", - name: "confirmDelete", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmDelete) { - this.error(chalk.yellow("Application stop cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/application.stop`, - { - json: { - applicationId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (response.status !== 200) { - this.error(chalk.red("Error stopping application")); - } - this.log(chalk.green("Application stop successful.")); - } catch (error: any) { - this.error(chalk.red(`Error stopping application: ${error.message}`)); - } - } -} diff --git a/src/commands/auth.ts b/src/commands/auth.ts new file mode 100644 index 0000000..91b6826 --- /dev/null +++ b/src/commands/auth.ts @@ -0,0 +1,38 @@ +import axios from "axios"; +import chalk from "chalk"; +import type { Command } from "commander"; +import { saveAuthConfig } from "../client.js"; + +export function registerAuthCommand(program: Command) { + program + .command("auth") + .description("Authenticate with your Dokploy server") + .requiredOption( + "-u, --url ", + "Server URL (e.g., https://panel.dokploy.com)", + ) + .requiredOption( + "-t, --token ", + "API key from your Dokploy dashboard", + ) + .action(async (opts: { url: string; token: string }) => { + const url = opts.url.replace(/\/+$/, ""); + + console.log(chalk.blue("Validating credentials...")); + + try { + await axios.get(`${url}/api/trpc/user.get`, { + headers: { + "x-api-key": opts.token, + "Content-Type": "application/json", + }, + }); + + saveAuthConfig(url, opts.token); + console.log(chalk.green("Authenticated successfully.")); + } catch (error: any) { + console.error(chalk.red(`Authentication failed: ${error.message}`)); + process.exit(1); + } + }); +} diff --git a/src/commands/authenticate.ts b/src/commands/authenticate.ts deleted file mode 100644 index c57eb49..0000000 --- a/src/commands/authenticate.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import inquirer, { type Answers, type QuestionCollection } from "inquirer"; -import * as fs from "node:fs"; -import * as path from "node:path"; -import { fileURLToPath } from "node:url"; -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const configPath = path.join(__dirname, "..", "..", "config.json"); - -export default class Authenticate extends Command { - static description = "Authenticate the user by saving server URL and token"; - - static examples = [ - "$ <%= config.bin %> <%= command.id %> --url=https://panel.dokploy.com --token=MRTHGZDGMRZWM43EMZSHGZTTMRTHGZDGONSGMZDTMY", - "$ <%= config.bin %> <%= command.id %> -u https://panel.dokploy.com -t MRTHGZDGMRZWM43EMZSHGZTTMRTHGZDGONSGMZDTMY", - ]; - - static flags = { - token: Flags.string({ - char: "t", - description: "Authentication token", - }), - url: Flags.string({ - char: "u", - description: "Server URL", - }), - }; - - async run() { - console.log( - chalk.blue.bold("\n Welcome to Dokploy CLI Authentication \n"), - ); - - const { flags } = await this.parse(Authenticate); - - let answers: Answers = {}; - - const questions: QuestionCollection[] = []; - - let config: { token?: string; url?: string } = {}; - if (fs.existsSync(configPath)) { - const configFileContent = fs.readFileSync(configPath, "utf8"); - config = JSON.parse(configFileContent); - } - - if (!flags.url) { - questions.push({ - default: config.url, - message: chalk.green( - "Enter your server URL (e.g., https://panel.dokploy.com): ", - ), - name: "url", - type: "input", - validate: (input) => (input ? true : "Server URL is required"), - }); - } - - if (!flags.token) { - questions.push({ - default: config.token, - message: chalk.green( - "Enter your authentication token (e.g., MRTHGZDGMRZWM43EMZSHGZTTMRTHGZDGONSGMZDTMY=): ", - ), - name: "token", - type: "input", - validate: (input) => - input ? true : "Authentication token is required", - }); - } - - if (questions.length > 0) { - answers = await inquirer.prompt(questions); - } - - const url = flags.url || answers.url; - const token = flags.token || answers.token; - - config.token = token; - config.url = url; - - try { - console.log(`\n${chalk.blue("Validating server...")}`); - - await axios.get( - `${url}/api/trpc/user.get`, - { - headers: { - "x-api-key": token, - "Content-Type": "application/json", - }, - }, - ); - - fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); - this.log(chalk.green("Authentication details saved successfully.")); - } catch (error) { - this.error( - // @ts-expect-error - Type - chalk.red(`Failed to save authentication details: ${error.message}`), - ); - } - } -} diff --git a/src/commands/database/mariadb/create.ts b/src/commands/database/mariadb/create.ts deleted file mode 100644 index d2c4811..0000000 --- a/src/commands/database/mariadb/create.ts +++ /dev/null @@ -1,250 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import inquirer from "inquirer"; -import { readAuthConfig } from "../../../utils/utils.js"; -import { getProjects, type Database } from "../../../utils/shared.js"; -import { slugify } from "../../../utils/slug.js"; -import type { Answers } from "../../app/create.js"; - -export default class DatabaseMariadbCreate extends Command { - static description = "Create a new MariaDB database within a project."; - - static examples = ["$ <%= config.bin %> mariadb create"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - name: Flags.string({ - char: "n", - description: "Database name", - required: false, - }), - databaseName: Flags.string({ - description: "MariaDB database name", - required: false, - }), - description: Flags.string({ - char: "d", - description: "Database description", - required: false, - }), - databaseRootPassword: Flags.string({ - description: "Database root password", - required: false, - }), - databasePassword: Flags.string({ - description: "Database password", - required: false, - }), - databaseUser: Flags.string({ - description: "Database user", - default: "mariadb", - }), - dockerImage: Flags.string({ - description: "Docker image", - default: "mariadb:11", - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - appName: Flags.string({ - description: "App name", - required: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseMariadbCreate); - let { - projectId, - environmentId, - name, - databaseName, - description, - databaseRootPassword, - databasePassword, - databaseUser, - dockerImage, - appName - } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !name || !databaseName || !appName) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to create the MariaDB instance in:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - environmentId = environment.environmentId; - } - - if (!name || !databaseName || !appName) { - const dbDetails = await inquirer.prompt([ - { - message: "Enter the name:", - name: "name", - type: "input", - validate: (input) => (input ? true : "Database name is required"), - default: name, - }, - { - message: "Database name:", - name: "databaseName", - type: "input", - validate: (input) => (input ? true : "Database name is required"), - default: databaseName, - }, - { - message: "Enter the database description (optional):", - name: "description", - type: "input", - default: description, - }, - { - message: "Database Root Password (optional):", - name: "databaseRootPassword", - type: "password", - default: databaseRootPassword, - }, - { - message: "Database password (optional):", - name: "databasePassword", - type: "password", - default: databasePassword, - }, - { - default: dockerImage || "mariadb:11", - message: "Docker Image (default: mariadb:11):", - name: "dockerImage", - type: "input", - }, - { - default: databaseUser || "mariadb", - message: "Database User: (default: mariadb):", - name: "databaseUser", - type: "input", - }, - ]); - - name = dbDetails.name; - databaseName = dbDetails.databaseName; - description = dbDetails.description; - databaseRootPassword = dbDetails.databaseRootPassword; - databasePassword = dbDetails.databasePassword; - dockerImage = dbDetails.dockerImage; - databaseUser = dbDetails.databaseUser; - - const appNamePrompt = await inquirer.prompt([ - { - default: appName || `${slugify(name)}`, - message: "Enter the App name:", - name: "appName", - type: "input", - validate: (input) => (input ? true : "App name is required"), - }, - ]); - - appName = appNamePrompt.appName; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirm = await inquirer.prompt([ - { - type: 'confirm', - name: 'proceed', - message: 'Do you want to create this MariaDB instance?', - default: false, - }, - ]); - - if (!confirm.proceed) { - this.error(chalk.yellow("MariaDB creation cancelled.")); - return; - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/mariadb.create`, - { - json: { - name, - databaseName, - description, - databaseRootPassword, - databasePassword, - databaseUser, - dockerImage, - appName, - projectId, - environmentId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (!response.data.result.data.json) { - this.error(chalk.red("Error creating MariaDB instance", response.data.result.data.json)); - } - - this.log(chalk.green(`MariaDB instance '${name}' created successfully.`)); - } catch (error: any) { - this.error(chalk.red(`Error creating MariaDB instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/mariadb/delete.ts b/src/commands/database/mariadb/delete.ts deleted file mode 100644 index 87c9ba6..0000000 --- a/src/commands/database/mariadb/delete.ts +++ /dev/null @@ -1,152 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import inquirer from "inquirer"; - -import { getProject, getProjects, type Database } from "../../../utils/shared.js"; -import { readAuthConfig } from "../../../utils/utils.js"; - -export default class DatabaseMariadbDelete extends Command { - static description = "Delete a MariaDB database from a project."; - static examples = [ - "$ <%= config.bin %> mariadb delete", - "$ <%= config.bin %> mariadb delete -p ", - ]; - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - mariadbId: Flags.string({ - char: "m", - description: "ID of the MariaDB instance to delete", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseMariadbDelete); - let { projectId, environmentId, mariadbId } = flags; - - if (!projectId || !environmentId || !mariadbId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const answers = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project.projectId, - })), - message: "Select a project to delete the MariaDB instance from:", - name: "selectedProject", - type: "list", - }, - ]); - selectedProject = projects.find(p => p.projectId === answers.selectedProject); - projectId = answers.selectedProject; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar MariaDB del environment - if (!mariadbId) { - if (!selectedEnvironment?.mariadb || selectedEnvironment.mariadb.length === 0) { - this.error(chalk.yellow("No MariaDB instances found in this environment.")); - } - - const dbAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.mariadb.map((db: Database) => ({ - name: db.name, - value: db.mariadbId, - })), - message: "Select the MariaDB instance to delete:", - name: "selectedDb", - type: "list", - }, - ]); - mariadbId = dbAnswers.selectedDb; - } - } - - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to delete this MariaDB instance?", - name: "confirmDelete", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmDelete) { - this.error(chalk.yellow("MariaDB deletion cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/mariadb.remove`, - { - json: { - mariadbId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (!response.data.result.data.json) { - this.error(chalk.red("Error deleting MariaDB instance")); - } - this.log(chalk.green("MariaDB instance deleted successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error deleting MariaDB instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/mariadb/deploy.ts b/src/commands/database/mariadb/deploy.ts deleted file mode 100644 index bc54751..0000000 --- a/src/commands/database/mariadb/deploy.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import { readAuthConfig } from "../../../utils/utils.js"; -import chalk from "chalk"; -import { getProject, getProjects, type Database } from "../../../utils/shared.js"; -import inquirer from "inquirer"; -import type { Answers } from "../../app/create.js"; -import axios from "axios"; - -export default class DatabaseMariadbDeploy extends Command { - static description = "Deploy an mariadb to a project."; - - static examples = ["$ <%= config.bin %> app deploy"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - mariadbId: Flags.string({ - char: "m", - description: "ID of the MariaDB instance to deploy", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseMariadbDeploy); - let { projectId, environmentId, mariadbId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !mariadbId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to deploy the MariaDB in:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar MariaDB del environment - if (!mariadbId) { - if (!selectedEnvironment?.mariadb || selectedEnvironment.mariadb.length === 0) { - this.error(chalk.yellow("No MariaDB instances found in this environment.")); - } - - const dbAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.mariadb.map((db: Database) => ({ - name: db.name, - value: db.mariadbId, - })), - message: "Select the MariaDB instance to deploy:", - name: "selectedDb", - type: "list", - }, - ]); - mariadbId = dbAnswers.selectedDb; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to deploy this MariaDB instance?", - name: "confirmDeploy", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmDeploy) { - this.error(chalk.yellow("MariaDB deployment cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/mariadb.deploy`, - { - json: { - mariadbId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (response.status !== 200) { - this.error(chalk.red("Error deploying MariaDB instance")); - } - this.log(chalk.green("MariaDB instance deployed successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error deploying MariaDB instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/mariadb/stop.ts b/src/commands/database/mariadb/stop.ts deleted file mode 100644 index f5c9d7e..0000000 --- a/src/commands/database/mariadb/stop.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import chalk from "chalk"; -import inquirer from "inquirer"; -import axios from "axios"; -import { getProject, getProjects, type Database } from "../../../utils/shared.js"; -import { readAuthConfig } from "../../../utils/utils.js"; -import type { Answers } from "../../app/create.js"; - -export default class DatabaseMariadbStop extends Command { - static description = "Stop an mariadb from a project."; - - static examples = ["$ <%= config.bin %> mariadb stop"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - mariadbId: Flags.string({ - char: "m", - description: "ID of the MariaDB instance to stop", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseMariadbStop); - let { projectId, environmentId, mariadbId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !mariadbId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to stop the MariaDB instance from:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar MariaDB del environment - if (!mariadbId) { - if (!selectedEnvironment?.mariadb || selectedEnvironment.mariadb.length === 0) { - this.error(chalk.yellow("No MariaDB instances found in this environment.")); - } - - const dbAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.mariadb.map((db: Database) => ({ - name: db.name, - value: db.mariadbId, - })), - message: "Select the MariaDB instance to stop:", - name: "selectedDb", - type: "list", - }, - ]); - mariadbId = dbAnswers.selectedDb; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to stop this MariaDB instance?", - name: "confirmStop", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmStop) { - this.error(chalk.yellow("MariaDB stop cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/mariadb.stop`, - { - json: { - mariadbId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (response.status !== 200) { - this.error(chalk.red("Error stopping MariaDB instance")); - } - this.log(chalk.green("MariaDB instance stopped successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error stopping MariaDB instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/mongo/create.ts b/src/commands/database/mongo/create.ts deleted file mode 100644 index 30ebd1b..0000000 --- a/src/commands/database/mongo/create.ts +++ /dev/null @@ -1,237 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import inquirer from "inquirer"; -import { readAuthConfig } from "../../../utils/utils.js"; -import { getProjects, type Database } from "../../../utils/shared.js"; -import { slugify } from "../../../utils/slug.js"; -import type { Answers } from "../../app/create.js"; - -export default class DatabaseMongoCreate extends Command { - static description = "Create a new MongoDB database within a project."; - - static examples = ["$ <%= config.bin %> mongo create"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - name: Flags.string({ - char: "n", - description: "Database name", - required: false, - }), - databaseName: Flags.string({ - description: "MongoDB database name", - required: false, - }), - description: Flags.string({ - char: "d", - description: "Database description", - required: false, - }), - databasePassword: Flags.string({ - description: "Database password", - required: false, - }), - databaseUser: Flags.string({ - description: "Database user", - default: "mongo", - }), - dockerImage: Flags.string({ - description: "Docker image", - default: "mongo:6", - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - appName: Flags.string({ - description: "App name", - required: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseMongoCreate); - let { - projectId, - environmentId, - name, - databaseName, - description, - databasePassword, - databaseUser, - dockerImage, - appName - } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !name || !databaseName || !appName || !databasePassword) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to create the MongoDB instance in:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - environmentId = environment.environmentId; - } - - if (!name || !databaseName || !appName || !databasePassword) { - const dbDetails = await inquirer.prompt([ - { - message: "Enter the name:", - name: "name", - type: "input", - validate: (input) => (input ? true : "Database name is required"), - default: name, - }, - { - message: "Database name:", - name: "databaseName", - type: "input", - validate: (input) => (input ? true : "Database name is required"), - default: databaseName, - }, - { - message: "Enter the database description (optional):", - name: "description", - type: "input", - default: description, - }, - { - message: "Database password (optional):", - name: "databasePassword", - type: "password", - default: databasePassword, - }, - { - default: dockerImage || "mongo:6", - message: "Docker Image (default: mongo:6):", - name: "dockerImage", - type: "input", - }, - { - default: databaseUser || "mongo", - message: "Database User: (default: mongo):", - name: "databaseUser", - type: "input", - }, - ]); - - name = dbDetails.name; - databaseName = dbDetails.databaseName; - description = dbDetails.description; - databasePassword = dbDetails.databasePassword; - dockerImage = dbDetails.dockerImage; - databaseUser = dbDetails.databaseUser; - - const appNamePrompt = await inquirer.prompt([ - { - default: appName || `${slugify(name)}`, - message: "Enter the App name:", - name: "appName", - type: "input", - validate: (input) => (input ? true : "App name is required"), - }, - ]); - - appName = appNamePrompt.appName; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirm = await inquirer.prompt([ - { - type: 'confirm', - name: 'proceed', - message: 'Do you want to create this MongoDB instance?', - default: false, - }, - ]); - - if (!confirm.proceed) { - this.error(chalk.yellow("MongoDB creation cancelled.")); - return; - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/mongo.create`, - { - json: { - name, - databaseName, - description, - databasePassword, - databaseUser, - dockerImage, - appName, - projectId, - environmentId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (!response.data.result.data.json) { - this.error(chalk.red("Error creating MongoDB instance")); - } - - this.log(chalk.green(`MongoDB instance '${name}' created successfully.`)); - } catch (error: any) { - this.error(chalk.red(`Error creating MongoDB instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/mongo/delete.ts b/src/commands/database/mongo/delete.ts deleted file mode 100644 index 1fe34eb..0000000 --- a/src/commands/database/mongo/delete.ts +++ /dev/null @@ -1,156 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import inquirer from "inquirer"; - -import { readAuthConfig } from "../../../utils/utils.js"; -import { getProject, getProjects, type Database } from "../../../utils/shared.js"; - -export default class DatabaseMongoDelete extends Command { - static description = "Delete a MongoDB database from a project."; - - static examples = [ - "$ <%= config.bin %> mongo delete", - "$ <%= config.bin %> mongo delete -p ", - ]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - mongoId: Flags.string({ - char: "m", - description: "ID of the MongoDB instance to delete", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseMongoDelete); - let { projectId, environmentId, mongoId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !mongoId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const answers = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project.projectId, - })), - message: "Select a project to delete the MongoDB instance from:", - name: "selectedProject", - type: "list", - }, - ]); - selectedProject = projects.find(p => p.projectId === answers.selectedProject); - projectId = answers.selectedProject; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar MongoDB del environment - if (!mongoId) { - if (!selectedEnvironment?.mongo || selectedEnvironment.mongo.length === 0) { - this.error(chalk.yellow("No MongoDB instances found in this environment.")); - } - - const dbAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.mongo.map((db: Database) => ({ - name: db.name, - value: db.mongoId, - })), - message: "Select the MongoDB instance to delete:", - name: "selectedDb", - type: "list", - }, - ]); - mongoId = dbAnswers.selectedDb; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to delete this MongoDB instance?", - name: "confirmDelete", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmDelete) { - this.error(chalk.yellow("MongoDB deletion cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/mongo.remove`, - { - json: { - mongoId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (!response.data.result.data.json) { - this.error(chalk.red("Error deleting MongoDB instance")); - } - this.log(chalk.green("MongoDB instance deleted successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error deleting MongoDB instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/mongo/deploy.ts b/src/commands/database/mongo/deploy.ts deleted file mode 100644 index 7353d7a..0000000 --- a/src/commands/database/mongo/deploy.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import { readAuthConfig } from "../../../utils/utils.js"; -import chalk from "chalk"; -import { getProject, getProjects, type Database } from "../../../utils/shared.js"; -import inquirer from "inquirer"; -import type { Answers } from "../../app/create.js"; -import axios from "axios"; - -export default class DatabaseMongoDeploy extends Command { - static description = "Deploy an mongo to a project."; - - static examples = ["$ <%= config.bin %> app deploy"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - mongoId: Flags.string({ - char: "m", - description: "ID of the MongoDB instance to deploy", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseMongoDeploy); - let { projectId, environmentId, mongoId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !mongoId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to deploy the MongoDB instance from:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar MongoDB del environment - if (!mongoId) { - if (!selectedEnvironment?.mongo || selectedEnvironment.mongo.length === 0) { - this.error(chalk.yellow("No MongoDB instances found in this environment.")); - } - - const dbAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.mongo.map((db: Database) => ({ - name: db.name, - value: db.mongoId, - })), - message: "Select the MongoDB instance to deploy:", - name: "selectedDb", - type: "list", - }, - ]); - mongoId = dbAnswers.selectedDb; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to deploy this MongoDB instance?", - name: "confirmDeploy", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmDeploy) { - this.error(chalk.yellow("MongoDB deployment cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/mongo.deploy`, - { - json: { - mongoId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (response.status !== 200) { - this.error(chalk.red("Error deploying MongoDB instance")); - } - this.log(chalk.green("MongoDB instance deployed successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error deploying MongoDB instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/mongo/stop.ts b/src/commands/database/mongo/stop.ts deleted file mode 100644 index e26f9ce..0000000 --- a/src/commands/database/mongo/stop.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import chalk from "chalk"; -import inquirer from "inquirer"; -import axios from "axios"; -import { getProject, getProjects, type Database } from "../../../utils/shared.js"; -import { readAuthConfig } from "../../../utils/utils.js"; -import type { Answers } from "../../app/create.js"; - -export default class DatabaseMongoStop extends Command { - static description = "Stop an mongo from a project."; - - static examples = ["$ <%= config.bin %> mongo stop"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - mongoId: Flags.string({ - char: "m", - description: "ID of the MongoDB instance to stop", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseMongoStop); - let { projectId, environmentId, mongoId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !mongoId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to stop the MongoDB instance from:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar MongoDB del environment - if (!mongoId) { - if (!selectedEnvironment?.mongo || selectedEnvironment.mongo.length === 0) { - this.error(chalk.yellow("No MongoDB instances found in this environment.")); - } - - const dbAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.mongo.map((db: Database) => ({ - name: db.name, - value: db.mongoId, - })), - message: "Select the MongoDB instance to stop:", - name: "selectedDb", - type: "list", - }, - ]); - mongoId = dbAnswers.selectedDb; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to stop this MongoDB instance?", - name: "confirmStop", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmStop) { - this.error(chalk.yellow("MongoDB stop cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/mongo.stop`, - { - json: { - mongoId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (response.status !== 200) { - this.error(chalk.red("Error stopping MongoDB instance")); - } - this.log(chalk.green("MongoDB instance stopped successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error stopping MongoDB instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/mysql/create.ts b/src/commands/database/mysql/create.ts deleted file mode 100644 index 402e8cb..0000000 --- a/src/commands/database/mysql/create.ts +++ /dev/null @@ -1,252 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import inquirer from "inquirer"; - -import { slugify } from "../../../utils/slug.js"; -import { readAuthConfig } from "../../../utils/utils.js"; -import { getProjects, type Database } from "../../../utils/shared.js"; -import type { Answers } from "../../app/create.js"; - -export default class DatabaseMysqlCreate extends Command { - static description = "Create a new MySQL database within a project."; - - static examples = ["$ <%= config.bin %> mysql create"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - name: Flags.string({ - char: "n", - description: "Database name", - required: false, - }), - databaseName: Flags.string({ - description: "MySQL database name", - required: false, - }), - description: Flags.string({ - char: "d", - description: "Database description", - required: false, - }), - databaseRootPassword: Flags.string({ - description: "Database root password", - required: false, - }), - databasePassword: Flags.string({ - description: "Database password", - required: false, - }), - databaseUser: Flags.string({ - description: "Database user", - default: "mysql", - }), - dockerImage: Flags.string({ - description: "Docker image", - default: "mysql:8", - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - appName: Flags.string({ - description: "App name", - required: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseMysqlCreate); - let { - projectId, - environmentId, - name, - databaseName, - description, - databaseRootPassword, - databasePassword, - databaseUser, - dockerImage, - appName - } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !name || !databaseName || !appName || !databasePassword || !databaseRootPassword) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to create the MySQL instance in:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - environmentId = environment.environmentId; - } - - if (!name || !databaseName || !appName || !databasePassword || !databaseRootPassword) { - const dbDetails = await inquirer.prompt([ - { - message: "Enter the name:", - name: "name", - type: "input", - validate: (input) => (input ? true : "Database name is required"), - default: name, - }, - { - message: "Database name:", - name: "databaseName", - type: "input", - validate: (input) => (input ? true : "Database name is required"), - default: databaseName, - }, - { - message: "Enter the database description (optional):", - name: "description", - type: "input", - default: description, - }, - { - message: "Database Root Password:", - name: "databaseRootPassword", - type: "password", - default: databaseRootPassword, - }, - { - message: "Database password:", - name: "databasePassword", - type: "password", - default: databasePassword, - }, - { - default: dockerImage || "mysql:8", - message: "Docker Image (default: mysql:8):", - name: "dockerImage", - type: "input", - }, - { - default: databaseUser || "mysql", - message: "Database User: (default: mysql):", - name: "databaseUser", - type: "input", - }, - ]); - - name = dbDetails.name; - databaseName = dbDetails.databaseName; - description = dbDetails.description; - databaseRootPassword = dbDetails.databaseRootPassword; - databasePassword = dbDetails.databasePassword; - dockerImage = dbDetails.dockerImage; - databaseUser = dbDetails.databaseUser; - - const appNamePrompt = await inquirer.prompt([ - { - default: appName || `${slugify(name)}`, - message: "Enter the App name:", - name: "appName", - type: "input", - validate: (input) => (input ? true : "App name is required"), - }, - ]); - - appName = appNamePrompt.appName; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirm = await inquirer.prompt([ - { - type: 'confirm', - name: 'proceed', - message: 'Do you want to create this MySQL instance?', - default: false, - }, - ]); - - if (!confirm.proceed) { - this.error(chalk.yellow("MySQL creation cancelled.")); - return; - } - } - - try { - - const response = await axios.post( - `${auth.url}/api/trpc/mysql.create`, - { - json: { - name, - databaseName, - description, - databaseRootPassword, - databasePassword, - databaseUser, - dockerImage, - appName, - projectId, - environmentId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (!response.data.result.data.json) { - this.error(chalk.red("Error creating MySQL instance", response.data.result.data.json)); - } - - this.log(chalk.green(`MySQL instance '${name}' created successfully.`)); - } catch (error: any) { - this.error(chalk.red(`Error creating MySQL instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/mysql/delete.ts b/src/commands/database/mysql/delete.ts deleted file mode 100644 index c05c442..0000000 --- a/src/commands/database/mysql/delete.ts +++ /dev/null @@ -1,156 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import inquirer from "inquirer"; - -import { readAuthConfig } from "../../../utils/utils.js"; -import { getProject, getProjects, type Database } from "../../../utils/shared.js"; - -export default class DatabaseMysqlDelete extends Command { - static description = "Delete a MySQL database from a project."; - - static examples = [ - "$ <%= config.bin %> mysql delete", - "$ <%= config.bin %> mysql delete -p ", - ]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - mysqlId: Flags.string({ - char: "i", - description: "ID of the MySQL database", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation", - required: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseMysqlDelete); - let { projectId, environmentId, mysqlId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !mysqlId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const answers = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project.projectId, - })), - message: "Select a project to delete the MySQL instance from:", - name: "selectedProject", - type: "list", - }, - ]); - selectedProject = projects.find(p => p.projectId === answers.selectedProject); - projectId = answers.selectedProject; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar MySQL del environment - if (!mysqlId) { - if (!selectedEnvironment?.mysql || selectedEnvironment.mysql.length === 0) { - this.error(chalk.yellow("No MySQL instances found in this environment.")); - } - - const dbAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.mysql.map((db: Database) => ({ - name: db.name, - value: db.mysqlId, - })), - message: "Select the MySQL instance to delete:", - name: "selectedDb", - type: "list", - }, - ]); - mysqlId = dbAnswers.selectedDb; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to delete this MySQL instance?", - name: "confirmDelete", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmDelete) { - this.error(chalk.yellow("MySQL deletion cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/mysql.remove`, - { - json: { - mysqlId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (!response.data.result.data.json) { - this.error(chalk.red("Error deleting MySQL instance")); - } - this.log(chalk.green("MySQL instance deleted successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error deleting MySQL instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/mysql/deploy.ts b/src/commands/database/mysql/deploy.ts deleted file mode 100644 index 747027b..0000000 --- a/src/commands/database/mysql/deploy.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import { readAuthConfig } from "../../../utils/utils.js"; -import chalk from "chalk"; -import { getProject, getProjects, type Database } from "../../../utils/shared.js"; -import inquirer from "inquirer"; -import type { Answers } from "../../app/create.js"; -import axios from "axios"; - -export default class DatabaseMysqlDeploy extends Command { - static description = "Deploy an mysql to a project."; - - static examples = ["$ <%= config.bin %> app deploy"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - mysqlId: Flags.string({ - char: "m", - description: "ID of the MySQL instance to deploy", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseMysqlDeploy); - let { projectId, environmentId, mysqlId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !mysqlId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to deploy the MySQL instance from:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar MySQL del environment - if (!mysqlId) { - if (!selectedEnvironment?.mysql || selectedEnvironment.mysql.length === 0) { - this.error(chalk.yellow("No MySQL instances found in this environment.")); - } - - const dbAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.mysql.map((db: Database) => ({ - name: db.name, - value: db.mysqlId, - })), - message: "Select the MySQL instance to deploy:", - name: "selectedDb", - type: "list", - }, - ]); - mysqlId = dbAnswers.selectedDb; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to deploy this MySQL instance?", - name: "confirmDeploy", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmDeploy) { - this.error(chalk.yellow("MySQL deployment cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/mysql.deploy`, - { - json: { - mysqlId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (response.status !== 200) { - this.error(chalk.red("Error deploying MySQL instance")); - } - this.log(chalk.green("MySQL instance deployed successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error deploying MySQL instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/mysql/stop.ts b/src/commands/database/mysql/stop.ts deleted file mode 100644 index 50ca2f6..0000000 --- a/src/commands/database/mysql/stop.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import chalk from "chalk"; -import inquirer from "inquirer"; -import axios from "axios"; -import { getProject, getProjects, type Database } from "../../../utils/shared.js"; -import { readAuthConfig } from "../../../utils/utils.js"; -import type { Answers } from "../../app/create.js"; - -export default class DatabaseMysqlStop extends Command { - static description = "Stop an mysql from a project."; - - static examples = ["$ <%= config.bin %> mysql stop"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - mysqlId: Flags.string({ - char: "i", - description: "ID of the MySQL database", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation", - required: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseMysqlStop); - let { projectId, environmentId, mysqlId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !mysqlId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to stop the MySQL instance from:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar MySQL del environment - if (!mysqlId) { - if (!selectedEnvironment?.mysql || selectedEnvironment.mysql.length === 0) { - this.error(chalk.yellow("No MySQL instances found in this environment.")); - } - - const dbAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.mysql.map((db: Database) => ({ - name: db.name, - value: db.mysqlId, - })), - message: "Select the MySQL instance to stop:", - name: "selectedDb", - type: "list", - }, - ]); - mysqlId = dbAnswers.selectedDb; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to stop this MySQL instance?", - name: "confirmStop", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmStop) { - this.error(chalk.yellow("MySQL stop cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/mysql.stop`, - { - json: { - mysqlId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (response.status !== 200) { - this.error(chalk.red("Error stopping MySQL instance")); - } - this.log(chalk.green("MySQL instance stopped successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error stopping MySQL instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/postgres/create.ts b/src/commands/database/postgres/create.ts deleted file mode 100644 index 55db1b7..0000000 --- a/src/commands/database/postgres/create.ts +++ /dev/null @@ -1,237 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import inquirer from "inquirer"; -import { slugify } from "../../../utils/slug.js"; -import { readAuthConfig } from "../../../utils/utils.js"; -import { getProjects, type Database } from "../../../utils/shared.js"; -import type { Answers } from "../../app/create.js"; -export default class DatabasePostgresCreate extends Command { - static description = "Create a new PostgreSQL database within a project."; - - static examples = ["$ <%= config.bin %> postgres create"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - name: Flags.string({ - char: "n", - description: "Database name", - required: false, - }), - databaseName: Flags.string({ - description: "PostgreSQL database name", - required: false, - }), - description: Flags.string({ - char: "d", - description: "Database description", - required: false, - }), - databasePassword: Flags.string({ - description: "Database password", - required: false, - }), - databaseUser: Flags.string({ - description: "Database user", - default: "postgres", - }), - dockerImage: Flags.string({ - description: "Docker image", - default: "postgres:15", - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - appName: Flags.string({ - description: "App name", - required: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabasePostgresCreate); - let { - projectId, - environmentId, - name, - databaseName, - description, - databasePassword, - databaseUser, - dockerImage, - appName - } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !name || !databaseName || !appName || !databasePassword) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to create the PostgreSQL instance in:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - environmentId = environment.environmentId; - } - - if (!name || !databaseName || !appName || !databasePassword) { - const dbDetails = await inquirer.prompt([ - { - message: "Enter the name:", - name: "name", - type: "input", - validate: (input) => (input ? true : "Database name is required"), - default: name, - }, - { - message: "Database name:", - name: "databaseName", - type: "input", - validate: (input) => (input ? true : "Database name is required"), - default: databaseName, - }, - { - message: "Enter the database description (optional):", - name: "description", - type: "input", - default: description, - }, - { - message: "Database password:", - name: "databasePassword", - type: "password", - default: databasePassword, - }, - { - default: dockerImage || "postgres:15", - message: "Docker Image (default: postgres:15):", - name: "dockerImage", - type: "input", - }, - { - default: databaseUser || "postgres", - message: "Database User: (default: postgres):", - name: "databaseUser", - type: "input", - }, - ]); - - name = dbDetails.name; - databaseName = dbDetails.databaseName; - description = dbDetails.description; - databasePassword = dbDetails.databasePassword; - dockerImage = dbDetails.dockerImage; - databaseUser = dbDetails.databaseUser; - - const appNamePrompt = await inquirer.prompt([ - { - default: appName || `${slugify(name)}`, - message: "Enter the App name:", - name: "appName", - type: "input", - validate: (input) => (input ? true : "App name is required"), - }, - ]); - - appName = appNamePrompt.appName; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirm = await inquirer.prompt([ - { - type: 'confirm', - name: 'proceed', - message: 'Do you want to create this PostgreSQL instance?', - default: false, - }, - ]); - - if (!confirm.proceed) { - this.error(chalk.yellow("PostgreSQL creation cancelled.")); - return; - } - } - - try { - - const response = await axios.post( - `${auth.url}/api/trpc/postgres.create`, - { - json: { - name, - databaseName, - description, - databasePassword, - databaseUser, - dockerImage, - appName, - projectId, - environmentId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (!response.data.result.data.json) { - this.error(chalk.red("Error creating PostgreSQL instance", response.data.result.data.json)); - } - - this.log(chalk.green(`PostgreSQL instance '${name}' created successfully.`)); - } catch (error: any) { - this.error(chalk.red(`Error creating PostgreSQL instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/postgres/delete.ts b/src/commands/database/postgres/delete.ts deleted file mode 100644 index 339d66c..0000000 --- a/src/commands/database/postgres/delete.ts +++ /dev/null @@ -1,156 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import inquirer from "inquirer"; - -import { readAuthConfig } from "../../../utils/utils.js"; -import { getProject, getProjects, type Database } from "../../../utils/shared.js"; - -export default class DatabasePostgresDelete extends Command { - static description = "Delete a PostgreSQL database from a project."; - - static examples = [ - "$ <%= config.bin %> postgres delete", - "$ <%= config.bin %> postgres delete -p ", - ]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - postgresId: Flags.string({ - char: "d", - description: "ID of the PostgreSQL database", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation", - required: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabasePostgresDelete); - let { projectId, environmentId, postgresId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !postgresId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const answers = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project.projectId, - })), - message: "Select a project to delete the PostgreSQL instance from:", - name: "selectedProject", - type: "list", - }, - ]); - selectedProject = projects.find(p => p.projectId === answers.selectedProject); - projectId = answers.selectedProject; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar PostgreSQL del environment - if (!postgresId) { - if (!selectedEnvironment?.postgres || selectedEnvironment.postgres.length === 0) { - this.error(chalk.yellow("No PostgreSQL instances found in this environment.")); - } - - const dbAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.postgres.map((db: Database) => ({ - name: db.name, - value: db.postgresId, - })), - message: "Select the PostgreSQL instance to delete:", - name: "selectedDb", - type: "list", - }, - ]); - postgresId = dbAnswers.selectedDb; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to delete this PostgreSQL instance?", - name: "confirmDelete", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmDelete) { - this.error(chalk.yellow("PostgreSQL deletion cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/postgres.remove`, - { - json: { - postgresId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (!response.data.result.data.json) { - this.error(chalk.red("Error deleting PostgreSQL instance")); - } - this.log(chalk.green("PostgreSQL instance deleted successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error deleting PostgreSQL instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/postgres/deploy.ts b/src/commands/database/postgres/deploy.ts deleted file mode 100644 index 490994d..0000000 --- a/src/commands/database/postgres/deploy.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import { readAuthConfig } from "../../../utils/utils.js"; -import chalk from "chalk"; -import { getProject, getProjects, type Database } from "../../../utils/shared.js"; -import inquirer from "inquirer"; -import type { Answers } from "../../app/create.js"; -import axios from "axios"; - -export default class DatabasePostgresDeploy extends Command { - static description = "Deploy a PostgreSQL instance to a project."; - - static examples = ["$ <%= config.bin %> postgres deploy"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - postgresId: Flags.string({ - char: "d", - description: "ID of the PostgreSQL instance to deploy", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabasePostgresDeploy); - let { projectId, environmentId, postgresId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !postgresId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to deploy the PostgreSQL instance from:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar PostgreSQL del environment - if (!postgresId) { - if (!selectedEnvironment?.postgres || selectedEnvironment.postgres.length === 0) { - this.error(chalk.yellow("No PostgreSQL instances found in this environment.")); - } - - const dbAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.postgres.map((db: Database) => ({ - name: db.name, - value: db.postgresId, - })), - message: "Select the PostgreSQL instance to deploy:", - name: "selectedDb", - type: "list", - }, - ]); - postgresId = dbAnswers.selectedDb; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to deploy this PostgreSQL instance?", - name: "confirmDeploy", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmDeploy) { - this.error(chalk.yellow("PostgreSQL deployment cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/postgres.deploy`, - { - json: { - postgresId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (response.status !== 200) { - this.error(chalk.red("Error deploying PostgreSQL instance")); - } - this.log(chalk.green("PostgreSQL instance deployed successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error deploying PostgreSQL instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/postgres/stop.ts b/src/commands/database/postgres/stop.ts deleted file mode 100644 index 920c56b..0000000 --- a/src/commands/database/postgres/stop.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import { readAuthConfig } from "../../../utils/utils.js"; -import chalk from "chalk"; -import { getProject, getProjects, type Database } from "../../../utils/shared.js"; -import inquirer from "inquirer"; -import type { Answers } from "../../app/create.js"; -import axios from "axios"; - -export default class DatabasePostgresStop extends Command { - static description = "Stop a PostgreSQL instance in a project."; - - static examples = ["$ <%= config.bin %> postgres stop"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - postgresId: Flags.string({ - char: "d", - description: "ID of the PostgreSQL instance to stop", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabasePostgresStop); - let { projectId, environmentId, postgresId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !postgresId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to stop the PostgreSQL instance from:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar PostgreSQL del environment - if (!postgresId) { - if (!selectedEnvironment?.postgres || selectedEnvironment.postgres.length === 0) { - this.error(chalk.yellow("No PostgreSQL instances found in this environment.")); - } - - const dbAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.postgres.map((db: Database) => ({ - name: db.name, - value: db.postgresId, - })), - message: "Select the PostgreSQL instance to stop:", - name: "selectedDb", - type: "list", - }, - ]); - postgresId = dbAnswers.selectedDb; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to stop this PostgreSQL instance?", - name: "confirmStop", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmStop) { - this.error(chalk.yellow("PostgreSQL stop cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/postgres.stop`, - { - json: { - postgresId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (response.status !== 200) { - this.error(chalk.red("Error stopping PostgreSQL instance")); - } - this.log(chalk.green("PostgreSQL instance stopped successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error stopping PostgreSQL instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/redis/create.ts b/src/commands/database/redis/create.ts deleted file mode 100644 index 4376b10..0000000 --- a/src/commands/database/redis/create.ts +++ /dev/null @@ -1,209 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import inquirer from "inquirer"; -import { slugify } from "../../../utils/slug.js"; -import { readAuthConfig } from "../../../utils/utils.js"; -import { getProjects, type Database } from "../../../utils/shared.js"; -import type { Answers } from "../../app/create.js"; - -export default class DatabaseRedisCreate extends Command { - static description = "Create a new Redis instance within a project."; - - static examples = ["$ <%= config.bin %> redis create"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - name: Flags.string({ - char: "n", - description: "Instance name", - required: false, - }), - description: Flags.string({ - char: "d", - description: "Instance description", - required: false, - }), - databasePassword: Flags.string({ - description: "Redis password", - required: false, - }), - dockerImage: Flags.string({ - description: "Docker image", - default: "redis:7", - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - appName: Flags.string({ - description: "App name", - required: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseRedisCreate); - let { - projectId, - name, - description, - databasePassword, - dockerImage, - appName - } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !name || !appName || !databasePassword) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to create the Redis instance in:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - environmentId = environment.environmentId; - } - - if (!name || !appName || !databasePassword) { - const redisDetails = await inquirer.prompt([ - { - message: "Enter the name:", - name: "name", - type: "input", - validate: (input) => (input ? true : "Instance name is required"), - default: name, - }, - { - message: "Enter the instance description (optional):", - name: "description", - type: "input", - default: description, - }, - { - message: "Redis password:", - name: "databasePassword", - type: "password", - default: databasePassword, - }, - { - default: dockerImage || "redis:7", - message: "Docker Image (default: redis:7):", - name: "dockerImage", - type: "input", - }, - ]); - - name = redisDetails.name; - description = redisDetails.description; - databasePassword = redisDetails.databasePassword; - dockerImage = redisDetails.dockerImage; - - const appNamePrompt = await inquirer.prompt([ - { - default: appName || `${slugify(name)}`, - message: "Enter the App name:", - name: "appName", - type: "input", - validate: (input) => (input ? true : "App name is required"), - }, - ]); - - appName = appNamePrompt.appName; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirm = await inquirer.prompt([ - { - type: 'confirm', - name: 'proceed', - message: 'Do you want to create this Redis instance?', - default: false, - }, - ]); - - if (!confirm.proceed) { - this.error(chalk.yellow("Redis creation cancelled.")); - return; - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/redis.create`, - { - json: { - name, - description, - databasePassword, - dockerImage, - appName, - projectId, - environmentId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (!response.data.result.data.json) { - this.error(chalk.red("Error creating Redis instance", response.data.result.data.json)); - } - - this.log(chalk.green(`Redis instance '${name}' created successfully.`)); - } catch (error: any) { - this.error(chalk.red(`Error creating Redis instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/redis/delete.ts b/src/commands/database/redis/delete.ts deleted file mode 100644 index c1bba51..0000000 --- a/src/commands/database/redis/delete.ts +++ /dev/null @@ -1,156 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import { readAuthConfig } from "../../../utils/utils.js"; -import chalk from "chalk"; -import { getProject, getProjects, type Database } from "../../../utils/shared.js"; -import inquirer from "inquirer"; -import type { Answers } from "../../app/create.js"; -import axios from "axios"; - -export default class DatabaseRedisDelete extends Command { - static description = "Delete a Redis instance from a project."; - - static examples = [ - "$ <%= config.bin %> redis delete", - "$ <%= config.bin %> redis delete -p ", - ]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - redisId: Flags.string({ - char: "r", - description: "ID of the Redis instance to delete", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseRedisDelete); - let { projectId, environmentId, redisId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !redisId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const answers = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project.projectId, - })), - message: "Select a project to delete the Redis instance from:", - name: "selectedProject", - type: "list", - }, - ]); - selectedProject = projects.find(p => p.projectId === answers.selectedProject); - projectId = answers.selectedProject; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar Redis del environment - if (!redisId) { - if (!selectedEnvironment?.redis || selectedEnvironment.redis.length === 0) { - this.error(chalk.yellow("No Redis instances found in this environment.")); - } - - const dbAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.redis.map((db: Database) => ({ - name: db.name, - value: db.redisId, - })), - message: "Select the Redis instance to delete:", - name: "selectedDb", - type: "list", - }, - ]); - redisId = dbAnswers.selectedDb; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to delete this Redis instance?", - name: "confirmDelete", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmDelete) { - this.error(chalk.yellow("Redis deletion cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/redis.remove`, - { - json: { - redisId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (!response.data.result.data.json) { - this.error(chalk.red("Error deleting Redis instance")); - } - this.log(chalk.green("Redis instance deleted successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error deleting Redis instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/redis/deploy.ts b/src/commands/database/redis/deploy.ts deleted file mode 100644 index 5cd7d7b..0000000 --- a/src/commands/database/redis/deploy.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import { readAuthConfig } from "../../../utils/utils.js"; -import chalk from "chalk"; -import { getProject, getProjects, type Database } from "../../../utils/shared.js"; -import inquirer from "inquirer"; -import type { Answers } from "../../app/create.js"; -import axios from "axios"; - -export default class DatabaseRedisDeploy extends Command { - static description = "Deploy a Redis instance to a project."; - - static examples = ["$ <%= config.bin %> redis deploy"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - redisId: Flags.string({ - char: "r", - description: "ID of the Redis instance to deploy", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseRedisDeploy); - let { projectId, environmentId, redisId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !redisId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to deploy the Redis instance from:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar Redis del environment - if (!redisId) { - if (!selectedEnvironment?.redis || selectedEnvironment.redis.length === 0) { - this.error(chalk.yellow("No Redis instances found in this environment.")); - } - - const dbAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.redis.map((db: Database) => ({ - name: db.name, - value: db.redisId, - })), - message: "Select the Redis instance to deploy:", - name: "selectedDb", - type: "list", - }, - ]); - redisId = dbAnswers.selectedDb; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to deploy this Redis instance?", - name: "confirmDeploy", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmDeploy) { - this.error(chalk.yellow("Redis deployment cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/redis.deploy`, - { - json: { - redisId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (response.status !== 200) { - this.error(chalk.red("Error deploying Redis instance")); - } - this.log(chalk.green("Redis instance deployed successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error deploying Redis instance: ${error.message}`)); - } - } -} diff --git a/src/commands/database/redis/stop.ts b/src/commands/database/redis/stop.ts deleted file mode 100644 index a71a2b5..0000000 --- a/src/commands/database/redis/stop.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import { readAuthConfig } from "../../../utils/utils.js"; -import chalk from "chalk"; -import { getProject, getProjects, type Database } from "../../../utils/shared.js"; -import inquirer from "inquirer"; -import type { Answers } from "../../app/create.js"; -import axios from "axios"; - -export default class DatabaseRedisStop extends Command { - static description = "Stop a Redis instance in a project."; - - static examples = ["$ <%= config.bin %> redis stop"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment", - required: false, - }), - redisId: Flags.string({ - char: "r", - description: "ID of the Redis instance to stop", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(DatabaseRedisStop); - let { projectId, environmentId, redisId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId || !redisId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - let selectedEnvironment; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to stop the Redis instance from:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment:", - name: "environment", - type: "list", - }, - ]); - selectedEnvironment = environment; - environmentId = environment.environmentId; - } else { - selectedEnvironment = selectedProject?.environments?.find(e => e.environmentId === environmentId); - } - - // 3. Seleccionar Redis del environment - if (!redisId) { - if (!selectedEnvironment?.redis || selectedEnvironment.redis.length === 0) { - this.error(chalk.yellow("No Redis instances found in this environment.")); - } - - const dbAnswers = await inquirer.prompt([ - { - choices: selectedEnvironment.redis.map((db: Database) => ({ - name: db.name, - value: db.redisId, - })), - message: "Select the Redis instance to stop:", - name: "selectedDb", - type: "list", - }, - ]); - redisId = dbAnswers.selectedDb; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to stop this Redis instance?", - name: "confirmStop", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmStop) { - this.error(chalk.yellow("Redis stop cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/redis.stop`, - { - json: { - redisId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (response.status !== 200) { - this.error(chalk.red("Error stopping Redis instance")); - } - this.log(chalk.green("Redis instance stopped successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error stopping Redis instance: ${error.message}`)); - } - } -} diff --git a/src/commands/env/pull.ts b/src/commands/env/pull.ts deleted file mode 100644 index c89793e..0000000 --- a/src/commands/env/pull.ts +++ /dev/null @@ -1,94 +0,0 @@ -import {Args, Command, Flags} from '@oclif/core' -import {readAuthConfig} from "../../utils/utils.js"; -import chalk from "chalk"; -import {getProject, getProjects} from "../../utils/shared.js"; -import inquirer from "inquirer"; -import {Answers} from "../app/create.js"; -import fs from 'fs'; - -export default class EnvPull extends Command { - static override args = { - file: Args.string({description: 'write to file', required: true}), - } - - static override description = 'Store remote environment variables in local' - - static override examples = [ - '<%= config.bin %> <%= command.id %> .env.stage.local', - ] - - static override flags = {} - - public async run(): Promise { - const {args} = await this.parse(EnvPull) - - if (fs.existsSync(args.file)) { - const {override} = await inquirer.prompt([ - { - message: `Do you want to override ${args.file} file?`, - name: "override", - default: false, - type: "confirm", - }, - ]); - if (!override) { - return - } - } - const auth = await readAuthConfig(this); - console.log(chalk.blue.bold("\n Listing all Projects \n")); - - const projects = await getProjects(auth, this); - const {project} = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select the project:", - name: "project", - type: "list", - }, - ]); - const projectId = project.projectId; - const projectSelected = await getProject(projectId, auth, this); - - const {environment} = await inquirer.prompt([ - { - choices: projectSelected.environments.map((environment: any) => ({ - name: environment.name, - value: environment, - })), - message: "Select the environment:", - name: "environment", - type: "list", - }, - ]); - - const choices = [ - ...environment.applications.map((app: any) => ({ - name: `${app.name} (Application)`, - value: app.env, - })), - ...environment.compose.map((compose: any) => ({ - name: `${compose.name} (Compose)`, - value: compose.env, - })), - ] - const {env} = await inquirer.prompt([ - { - choices, - message: "Select a service to pull the environment variables:", - name: "env", - type: "list", - }, - - ]); - - - fs.writeFileSync(args.file, env || "") - this.log(chalk.green("Environment variable write to file successful.")); - - - } -} diff --git a/src/commands/env/push.ts b/src/commands/env/push.ts deleted file mode 100644 index c3f2809..0000000 --- a/src/commands/env/push.ts +++ /dev/null @@ -1,143 +0,0 @@ -import {Args, Command, Flags} from '@oclif/core' -import fs from "fs"; -import chalk from "chalk"; -import inquirer from "inquirer"; -import {readAuthConfig} from "../../utils/utils.js"; -import {getProject, getProjects} from "../../utils/shared.js"; -import {Answers} from "../app/create.js"; -import axios from "axios"; - -export default class EnvPush extends Command { - static override args = { - file: Args.string({description: '.env file to push', required: true}), - } - - static override description = 'Push dotenv file to remote service' - - static override examples = [ - '<%= config.bin %> <%= command.id %> .env.stage.local', - ] - - static override flags = {} - - public async run(): Promise { - const {args, flags} = await this.parse(EnvPush) - - if (!fs.existsSync(args.file)) { - console.log(chalk.red.bold(`\n File ${args.file} doesn't exists \n`)); - return; - } - - const {override} = await inquirer.prompt([ - { - message: `This command will override entire remote environment variables. Do you want to continue?`, - name: "override", - default: false, - type: "confirm", - }, - ]); - if (!override) { - return - } - - const fileContent = fs.readFileSync(args.file, 'utf-8'); - const auth = await readAuthConfig(this); - console.log(chalk.blue.bold("\n Listing all Projects \n")); - - const projects = await getProjects(auth, this); - const {project} = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select the project:", - name: "project", - type: "list", - }, - ]); - const projectId = project.projectId; - const projectSelected = await getProject(projectId, auth, this); - - const {environment} = await inquirer.prompt([ - { - choices: projectSelected.environments.map((environment: any) => ({ - name: environment.name, - value: environment, - })), - message: "Select the environment:", - name: "environment", - type: "list", - }, - ]); - - const choices = [ - ...environment.applications.map((app: any) => ({ - name: `${app.name} (Application)`, - value: {serviceType: 'app', service: app}, - })), - ...environment.compose.map((compose: any) => ({ - name: `${compose.name} (Compose)`, - value: {serviceType: 'compose', service: compose} - })), - ] - const {result: {serviceType, service}} = await inquirer.prompt([ - { - choices, - message: "Select a service to push the environment variables:", - name: "result", - type: "list", - }, - - ]); - - if (serviceType === 'app') { - const {applicationId} = service; - const response = await axios.post( - `${auth.url}/api/trpc/application.update`, - { - json: { - applicationId, - env: fileContent - } - }, { - - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - } - ) - if (response.status !== 200) { - this.error(chalk.red("Error stopping application")); - } - this.log(chalk.green("Environment variable push successful.")); - - } - - if (serviceType === 'compose') { - const {composeId} = service; - const response = await axios.post( - `${auth.url}/api/trpc/compose.update`, - { - json: { - composeId, - env: fileContent - } - }, { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - } - ) - if (response.status !== 200) { - this.error(chalk.red("Error stopping application")); - } - this.log(chalk.green("Environment variable push successful.")); - - } - - - } -} diff --git a/src/commands/environment/create.ts b/src/commands/environment/create.ts deleted file mode 100644 index 761008d..0000000 --- a/src/commands/environment/create.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import inquirer from "inquirer"; - -import { getProjects } from "../../utils/shared.js"; -import { readAuthConfig } from "../../utils/utils.js"; -import type { Answers } from "../app/create.js"; - -export default class EnvironmentCreate extends Command { - static description = "Create a new environment within a project."; - - static examples = ["$ <%= config.bin %> environment create"]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - name: Flags.string({ - char: "n", - description: "Environment name", - required: false, - }), - description: Flags.string({ - char: "d", - description: "Environment description", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(EnvironmentCreate); - let { projectId, name, description } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !name) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to create the environment in:", - name: "project", - type: "list", - }, - ]); - projectId = project.projectId; - } - - // 2. Ingresar detalles del environment - if (!name) { - const envDetails = await inquirer.prompt([ - { - message: "Enter the environment name:", - name: "name", - type: "input", - validate: (input) => (input ? true : "Environment name is required"), - default: name, - }, - { - message: "Enter the environment description (optional):", - name: "description", - type: "input", - default: description, - }, - ]); - - name = envDetails.name; - description = envDetails.description; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirm = await inquirer.prompt([ - { - type: 'confirm', - name: 'proceed', - message: 'Do you want to create this environment?', - default: false, - }, - ]); - - if (!confirm.proceed) { - this.error(chalk.yellow("Environment creation cancelled.")); - return; - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/environment.create`, - { - json: { - name, - description, - projectId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (!response.data.result.data.json) { - this.error(chalk.red("Error creating environment")); - } - - this.log(chalk.green(`Environment '${name}' created successfully.`)); - } catch (error: any) { - this.error(chalk.red(`Error creating environment: ${error.message}`)); - } - } -} diff --git a/src/commands/environment/delete.ts b/src/commands/environment/delete.ts deleted file mode 100644 index 8417ac1..0000000 --- a/src/commands/environment/delete.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import inquirer from "inquirer"; - -import { getProjects } from "../../utils/shared.js"; -import { readAuthConfig } from "../../utils/utils.js"; -import type { Answers } from "../app/create.js"; - -export default class EnvironmentDelete extends Command { - static description = "Delete an environment from a project."; - - static examples = [ - "$ <%= config.bin %> environment delete", - "$ <%= config.bin %> environment delete -p ", - ]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - environmentId: Flags.string({ - char: "e", - description: "ID of the environment to delete", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(EnvironmentDelete); - let { projectId, environmentId } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!projectId || !environmentId) { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - const projects = await getProjects(auth, this); - - let selectedProject; - - // 1. Seleccionar proyecto - if (!projectId) { - const { project } = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project, - })), - message: "Select a project to delete the environment from:", - name: "project", - type: "list", - }, - ]); - selectedProject = project; - projectId = project.projectId; - } else { - selectedProject = projects.find(p => p.projectId === projectId); - } - - // 2. Seleccionar environment del proyecto - if (!environmentId) { - if (!selectedProject?.environments || selectedProject.environments.length === 0) { - this.error(chalk.yellow("No environments found in this project.")); - } - - const { environment } = await inquirer.prompt([ - { - choices: selectedProject.environments.map((env) => ({ - name: `${env.name} (${env.description})`, - value: env, - })), - message: "Select an environment to delete:", - name: "environment", - type: "list", - }, - ]); - environmentId = environment.environmentId; - } - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirmAnswers = await inquirer.prompt([ - { - default: false, - message: "Are you sure you want to delete this environment? This action cannot be undone.", - name: "confirmDelete", - type: "confirm", - }, - ]); - - if (!confirmAnswers.confirmDelete) { - this.error(chalk.yellow("Environment deletion cancelled.")); - } - } - - try { - const response = await axios.post( - `${auth.url}/api/trpc/environment.remove`, - { - json: { - environmentId, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (!response.data.result.data.json) { - this.error(chalk.red("Error deleting environment")); - } - - this.log(chalk.green("Environment deleted successfully.")); - } catch (error: any) { - this.error(chalk.red(`Error deleting environment: ${error.message}`)); - } - } -} diff --git a/src/commands/project/create.ts b/src/commands/project/create.ts deleted file mode 100644 index da57ac7..0000000 --- a/src/commands/project/create.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import inquirer from "inquirer"; -import { readAuthConfig } from "../../utils/utils.js"; - -export default class ProjectCreate extends Command { - static description = "Create a new project."; - - static examples = [ - "$ <%= config.bin %> project create", - "$ <%= config.bin %> project create -n MyProject -d 'Project description'", - "$ <%= config.bin %> project create --name MyProject --skipConfirm", - ]; - - static flags = { - name: Flags.string({ - char: "n", - description: "Name of the project", - required: false, - }), - description: Flags.string({ - char: "d", - description: "Description of the project", - required: false, - }), - skipConfirm: Flags.boolean({ - char: "y", - description: "Skip confirmation prompt", - default: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - const { flags } = await this.parse(ProjectCreate); - let { name, description } = flags; - - // Modo interactivo si no se proporcionan los flags necesarios - if (!name) { - const answers = await inquirer.prompt([ - { - message: "Enter the project name:", - name: "name", - type: "input", - validate: (input) => (input ? true : "Project name is required"), - }, - { - message: "Enter the project description (optional):", - name: "description", - type: "input", - default: description || "", - }, - ]); - - name = answers.name; - description = answers.description; - } - - // Confirmar si no se especifica --skipConfirm - if (!flags.skipConfirm) { - const confirm = await inquirer.prompt([ - { - type: 'confirm', - name: 'proceed', - message: 'Do you want to create this project?', - default: false, - }, - ]); - - if (!confirm.proceed) { - this.error(chalk.yellow("Project creation cancelled.")); - return; - } - } - - try { - - const response = await axios.post( - `${auth.url}/api/trpc/project.create`, - { - json: { - name, - description, - }, - }, - { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }, - ); - - if (!response.data.result.data.json) { - this.error(chalk.red("Error creating project", response.data.result.data.json)); - } - - this.log(chalk.green(`Project '${name}' created successfully.`)); - } catch (error: any) { - this.error(chalk.red(`Error creating project: ${error.message}`)); - } - } -} diff --git a/src/commands/project/info.ts b/src/commands/project/info.ts deleted file mode 100644 index b461953..0000000 --- a/src/commands/project/info.ts +++ /dev/null @@ -1,195 +0,0 @@ -import { Command, Flags } from "@oclif/core"; -import chalk from "chalk"; -import inquirer from "inquirer"; - -import { readAuthConfig } from "../../utils/utils.js"; -import { getProjects } from "../../utils/shared.js"; - -export default class ProjectInfo extends Command { - static description = - "Get detailed information about a project, including the number of applications and databases."; - - static examples = [ - "$ <%= config.bin %> project info", - "$ <%= config.bin %> project info -p ", - ]; - - static flags = { - projectId: Flags.string({ - char: "p", - description: "ID of the project", - required: false, - }), - }; - - public async run(): Promise { - const auth = await readAuthConfig(this); - - const { flags } = await this.parse(ProjectInfo); - - if (flags.projectId) { - await this.showProjectInfo(auth, flags.projectId); - } else { - console.log(chalk.blue.bold("\n Listing all Projects \n")); - - try { - const projects = await getProjects(auth, this); - - if (projects.length === 0) { - this.log(chalk.yellow("No projects found.")); - return; - } - - const answers = await inquirer.prompt([ - { - choices: projects.map((project) => ({ - name: project.name, - value: project.projectId, - })), - message: "Select a project to view details:", - name: "selectedProject", - type: "list", - }, - ]); - - const selectedProjectId = answers.selectedProject; - - await this.showProjectInfo(auth, selectedProjectId); - } catch (error) { - // @ts-expect-error hola - this.error(chalk.red(`Failed to fetch project list: ${error.message}`)); - } - } - } - - private async showProjectInfo( - auth: { token: string; url: string }, - projectId: string, - ) { - console.log( - chalk.blue.bold(`\n Information for Project ID: ${projectId} \n`), - ); - - try { - const projects = await getProjects(auth, this); - const projectInfo = projects.find(p => p.projectId === projectId); - - if (!projectInfo) { - this.error(chalk.red("Project not found.")); - return; - } - - this.log(chalk.green(`Project Name: ${projectInfo.name}`)); - this.log( - chalk.green( - `Description: ${projectInfo?.description || "No description"}`, - ), - ); - - // Contar totales de todos los environments - let totalApplications = 0; - let totalCompose = 0; - let totalMariaDB = 0; - let totalMongoDB = 0; - let totalMySQL = 0; - let totalPostgreSQL = 0; - let totalRedis = 0; - - if (projectInfo.environments && projectInfo.environments.length > 0) { - this.log(chalk.green(`Number of Environments: ${projectInfo.environments.length}`)); - - // Mostrar información por environment - projectInfo.environments.forEach((env, envIndex) => { - this.log(chalk.blue(`\nEnvironment ${envIndex + 1}: ${env.name} (${env.description})`)); - - // Contar recursos por environment - const envApps = env.applications?.length || 0; - const envCompose = env.compose?.length || 0; - const envMariaDB = env.mariadb?.length || 0; - const envMongoDB = env.mongo?.length || 0; - const envMySQL = env.mysql?.length || 0; - const envPostgreSQL = env.postgres?.length || 0; - const envRedis = env.redis?.length || 0; - - totalApplications += envApps; - totalCompose += envCompose; - totalMariaDB += envMariaDB; - totalMongoDB += envMongoDB; - totalMySQL += envMySQL; - totalPostgreSQL += envPostgreSQL; - totalRedis += envRedis; - - this.log(` Applications: ${envApps}`); - this.log(` Compose Services: ${envCompose}`); - this.log(` MariaDB: ${envMariaDB}`); - this.log(` MongoDB: ${envMongoDB}`); - this.log(` MySQL: ${envMySQL}`); - this.log(` PostgreSQL: ${envPostgreSQL}`); - this.log(` Redis: ${envRedis}`); - - // Mostrar detalles de applications - if (envApps > 0) { - this.log(chalk.cyan(" Applications:")); - env.applications.forEach((app, index) => { - this.log(` ${index + 1}. ${app.name}`); - }); - } - - // Mostrar detalles de databases - if (envMariaDB > 0) { - this.log(chalk.cyan(" MariaDB Databases:")); - env.mariadb.forEach((db, index) => { - this.log(` ${index + 1}. ${db.name}`); - }); - } - - if (envMongoDB > 0) { - this.log(chalk.cyan(" MongoDB Databases:")); - env.mongo.forEach((db, index) => { - this.log(` ${index + 1}. ${db.name}`); - }); - } - - if (envMySQL > 0) { - this.log(chalk.cyan(" MySQL Databases:")); - env.mysql.forEach((db, index) => { - this.log(` ${index + 1}. ${db.name}`); - }); - } - - if (envPostgreSQL > 0) { - this.log(chalk.cyan(" PostgreSQL Databases:")); - env.postgres.forEach((db, index) => { - this.log(` ${index + 1}. ${db.name}`); - }); - } - - if (envRedis > 0) { - this.log(chalk.cyan(" Redis Databases:")); - env.redis.forEach((db, index) => { - this.log(` ${index + 1}. ${db.name}`); - }); - } - }); - } else { - this.log(chalk.yellow("No environments found in this project.")); - } - - // Mostrar totales - this.log(chalk.green.bold("\nšŸ“Š Project Totals:")); - this.log(chalk.green(`Total Applications: ${totalApplications}`)); - this.log(chalk.green(`Total Compose Services: ${totalCompose}`)); - this.log(chalk.green(`Total MariaDB Databases: ${totalMariaDB}`)); - this.log(chalk.green(`Total MongoDB Databases: ${totalMongoDB}`)); - this.log(chalk.green(`Total MySQL Databases: ${totalMySQL}`)); - this.log(chalk.green(`Total PostgreSQL Databases: ${totalPostgreSQL}`)); - this.log(chalk.green(`Total Redis Databases: ${totalRedis}`)); - - } catch (error) { - this.error( - // @ts-expect-error - chalk.red(`Failed to fetch project information: ${error.message}`), - ); - } - } -} diff --git a/src/commands/project/list.ts b/src/commands/project/list.ts deleted file mode 100644 index 91242b6..0000000 --- a/src/commands/project/list.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { Command } from "@oclif/core"; -import chalk from "chalk"; -import Table from "cli-table3"; - -import { readAuthConfig } from "../../utils/utils.js"; -import { getProjects } from "../../utils/shared.js"; - -export default class ProjectList extends Command { - static description = "List all projects."; - - static examples = ["$ <%= config.bin %> project list"]; - - public async run(): Promise { - const auth = await readAuthConfig(this); - - console.log(chalk.blue.bold("\n Listing all Projects \n")); - - try { - const projects = await getProjects(auth, this); - - if (projects.length === 0) { - this.log(chalk.yellow("No projects found.")); - } else { - this.log(chalk.green("Projects:")); - const table = new Table({ - colWidths: [10, 30, 50], - head: [ - chalk.cyan("Index"), - chalk.cyan("Name"), - chalk.cyan("Description"), - ], - }); - const index = 1; - for (const project of projects) { - table.push([ - chalk.white(index + 1), - chalk.white(project.name), - chalk.gray(project.description || "No description"), - ]); - } - - this.log(table.toString()); - } - } catch (error) { - // @ts-expect-error error is not defined - this.error(chalk.red(`Failed to list projects: ${error?.message}`)); - } - } -} diff --git a/src/commands/verify.ts b/src/commands/verify.ts deleted file mode 100644 index f9b6475..0000000 --- a/src/commands/verify.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { Command } from "@oclif/core"; -import axios from "axios"; -import chalk from "chalk"; -import * as fs from "node:fs"; -import * as path from "node:path"; -import { fileURLToPath } from "node:url"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const configPath = path.join(__dirname, "..", "..", "config.json"); - -export default class Verify extends Command { - static description = "Verify if the saved authentication token is valid"; - - static examples = ["$ <%= config.bin %> <%= command.id %>"]; - - async run() { - console.log(chalk.blue.bold("\nVerifying Authentication Token")); - - let token: string; - let url: string; - - // Verificar variables de entorno primero - const envToken = process.env.DOKPLOY_AUTH_TOKEN; - const envUrl = process.env.DOKPLOY_URL; - - if (envToken && envUrl) { - token = envToken; - url = envUrl; - this.log(chalk.green("Using environment variables for authentication")); - } else { - // Si no hay variables de entorno, verificar archivo de configuración - if (!fs.existsSync(configPath)) { - this.error( - chalk.red( - "No configuration found. Please either:\n" + - "1. Authenticate using `authenticate` command\n" + - "2. Set DOKPLOY_URL and DOKPLOY_AUTH_TOKEN environment variables", - ), - ); - } - - try { - const config = JSON.parse(fs.readFileSync(configPath, "utf8")); - token = config.token; - url = config.url; - this.log(chalk.green("Using configuration file for authentication")); - } catch (error) { - this.error( - chalk.red( - "Invalid configuration file. Please authenticate again using `authenticate` command.", - ), - ); - } - } - - // Validar el token contra el servidor - try { - console.log(chalk.blue("Validating token with server...")); - - const response = await axios.get( - `${url}/api/trpc/user.get`, - { - headers: { - "x-api-key": token, - "Content-Type": "application/json", - }, - }, - ); - - if (response.data.result.data.json) { - this.log(chalk.green("\nāœ“ Token is valid")); - } else { - this.error( - chalk.red( - "Invalid token. Please authenticate again using `authenticate` command.", - ), - ); - } - } catch (error: any) { - this.error( - chalk.red( - `Failed to verify token: ${error.message}. Please authenticate again using 'authenticate' command.`, - ), - ); - } - } -} diff --git a/src/generated/commands.ts b/src/generated/commands.ts new file mode 100644 index 0000000..167b136 --- /dev/null +++ b/src/generated/commands.ts @@ -0,0 +1,8720 @@ +// Auto-generated from openapi.json — do not edit manually. +// Run: npx tsx scripts/generate.ts + +import type { Command } from "commander"; +import chalk from "chalk"; +import { apiPost, apiGet } from "../client.js"; + +function printOutput(data: unknown) { + if (data === null || data === undefined) { + console.log(chalk.green("OK")); + return; + } + if (typeof data === "string") { + console.log(data); + return; + } + console.log(JSON.stringify(data, null, 2)); +} + +export function registerGeneratedCommands(program: Command) { + const g_admin = program.command('admin').description('admin commands'); + + g_admin + .command('setup-monitoring') + .description('admin setupMonitoring') + .requiredOption('--metricsConfig ', 'metricsConfig') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("admin.setupMonitoring", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_ai = program.command('ai').description('ai commands'); + + g_ai + .command('create') + .description('ai create') + .requiredOption('--name ', 'name') + .requiredOption('--apiUrl ', 'apiUrl') + .requiredOption('--apiKey ', 'apiKey') + .requiredOption('--model ', 'model') + .requiredOption('--isEnabled', 'isEnabled') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["isEnabled"] != null) opts["isEnabled"] = opts["isEnabled"] === true || opts["isEnabled"] === "true"; + const data = await apiPost("ai.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_ai + .command('delete') + .description('ai delete') + .requiredOption('--aiId ', 'aiId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("ai.delete", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_ai + .command('deploy') + .description('ai deploy') + .requiredOption('--environmentId ', 'environmentId') + .requiredOption('--id ', 'id') + .requiredOption('--dockerCompose ', 'dockerCompose') + .requiredOption('--envVariables ', 'envVariables') + .option('--serverId ', 'serverId') + .requiredOption('--name ', 'name') + .requiredOption('--description ', 'description') + .option('--domains ', 'domains') + .option('--configFiles ', 'configFiles') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("ai.deploy", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_ai + .command('get') + .description('ai get') + .requiredOption('--aiId ', 'aiId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("ai.get", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_ai + .command('get-all') + .description('ai getAll') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("ai.getAll", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_ai + .command('get-models') + .description('ai getModels') + .requiredOption('--apiUrl ', 'apiUrl') + .requiredOption('--apiKey ', 'apiKey') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("ai.getModels", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_ai + .command('one') + .description('ai one') + .requiredOption('--aiId ', 'aiId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("ai.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_ai + .command('suggest') + .description('ai suggest') + .requiredOption('--aiId ', 'aiId') + .requiredOption('--input ', 'input') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("ai.suggest", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_ai + .command('update') + .description('ai update') + .requiredOption('--aiId ', 'aiId') + .option('--name ', 'name') + .option('--apiUrl ', 'apiUrl') + .option('--apiKey ', 'apiKey') + .option('--model ', 'model') + .option('--isEnabled', 'isEnabled') + .option('--createdAt ', 'createdAt') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["isEnabled"] != null) opts["isEnabled"] = opts["isEnabled"] === true || opts["isEnabled"] === "true"; + const data = await apiPost("ai.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_application = program.command('application').description('application commands'); + + g_application + .command('cancel-deployment') + .description('application cancelDeployment') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.cancelDeployment", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('clean-queues') + .description('application cleanQueues') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.cleanQueues", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('clear-deployments') + .description('application clearDeployments') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.clearDeployments", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('create') + .description('application create') + .requiredOption('--name ', 'name') + .option('--appName ', 'appName') + .option('--description ', 'description') + .requiredOption('--environmentId ', 'environmentId') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('delete') + .description('application delete') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.delete", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('deploy') + .description('application deploy') + .requiredOption('--applicationId ', 'applicationId') + .option('--title ', 'title') + .option('--description ', 'description') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.deploy", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('disconnect-git-provider') + .description('application disconnectGitProvider') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.disconnectGitProvider", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('kill-build') + .description('application killBuild') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.killBuild", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('mark-running') + .description('application markRunning') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.markRunning", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('move') + .description('application move') + .requiredOption('--applicationId ', 'applicationId') + .requiredOption('--targetEnvironmentId ', 'targetEnvironmentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.move", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('one') + .description('application one') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("application.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('read-app-monitoring') + .description('application readAppMonitoring') + .requiredOption('--appName ', 'appName') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("application.readAppMonitoring", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('read-traefik-config') + .description('application readTraefikConfig') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("application.readTraefikConfig", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('redeploy') + .description('application redeploy') + .requiredOption('--applicationId ', 'applicationId') + .option('--title ', 'title') + .option('--description ', 'description') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.redeploy", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('refresh-token') + .description('application refreshToken') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.refreshToken", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('reload') + .description('application reload') + .requiredOption('--appName ', 'appName') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.reload", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('save-bitbucket-provider') + .description('application saveBitbucketProvider') + .requiredOption('--bitbucketBranch ', 'bitbucketBranch') + .requiredOption('--bitbucketBuildPath ', 'bitbucketBuildPath') + .requiredOption('--bitbucketOwner ', 'bitbucketOwner') + .requiredOption('--bitbucketRepository ', 'bitbucketRepository') + .requiredOption('--bitbucketRepositorySlug ', 'bitbucketRepositorySlug') + .requiredOption('--bitbucketId ', 'bitbucketId') + .requiredOption('--applicationId ', 'applicationId') + .option('--enableSubmodules', 'enableSubmodules') + .option('--watchPaths ', 'watchPaths') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["enableSubmodules"] != null) opts["enableSubmodules"] = opts["enableSubmodules"] === true || opts["enableSubmodules"] === "true"; + const data = await apiPost("application.saveBitbucketProvider", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('save-build-type') + .description('application saveBuildType') + .requiredOption('--applicationId ', 'applicationId') + .requiredOption('--buildType ', 'buildType (dockerfile, heroku_buildpacks, paketo_buildpacks, nixpacks, static, railpack)') + .requiredOption('--dockerfile ', 'dockerfile') + .requiredOption('--dockerContextPath ', 'dockerContextPath') + .requiredOption('--dockerBuildStage ', 'dockerBuildStage') + .requiredOption('--herokuVersion ', 'herokuVersion') + .requiredOption('--railpackVersion ', 'railpackVersion') + .option('--publishDirectory ', 'publishDirectory') + .option('--isStaticSpa', 'isStaticSpa') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["isStaticSpa"] != null) opts["isStaticSpa"] = opts["isStaticSpa"] === true || opts["isStaticSpa"] === "true"; + const data = await apiPost("application.saveBuildType", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('save-docker-provider') + .description('application saveDockerProvider') + .requiredOption('--dockerImage ', 'dockerImage') + .requiredOption('--applicationId ', 'applicationId') + .requiredOption('--username ', 'username') + .requiredOption('--password ', 'password') + .requiredOption('--registryUrl ', 'registryUrl') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.saveDockerProvider", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('save-environment') + .description('application saveEnvironment') + .requiredOption('--applicationId ', 'applicationId') + .requiredOption('--env ', 'env') + .requiredOption('--buildArgs ', 'buildArgs') + .requiredOption('--buildSecrets ', 'buildSecrets') + .requiredOption('--createEnvFile', 'createEnvFile') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["createEnvFile"] != null) opts["createEnvFile"] = opts["createEnvFile"] === true || opts["createEnvFile"] === "true"; + const data = await apiPost("application.saveEnvironment", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('save-gitea-provider') + .description('application saveGiteaProvider') + .requiredOption('--applicationId ', 'applicationId') + .requiredOption('--giteaBranch ', 'giteaBranch') + .requiredOption('--giteaBuildPath ', 'giteaBuildPath') + .requiredOption('--giteaOwner ', 'giteaOwner') + .requiredOption('--giteaRepository ', 'giteaRepository') + .requiredOption('--giteaId ', 'giteaId') + .option('--enableSubmodules', 'enableSubmodules') + .option('--watchPaths ', 'watchPaths') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["enableSubmodules"] != null) opts["enableSubmodules"] = opts["enableSubmodules"] === true || opts["enableSubmodules"] === "true"; + const data = await apiPost("application.saveGiteaProvider", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('save-github-provider') + .description('application saveGithubProvider') + .requiredOption('--applicationId ', 'applicationId') + .requiredOption('--repository ', 'repository') + .requiredOption('--branch ', 'branch') + .requiredOption('--owner ', 'owner') + .requiredOption('--buildPath ', 'buildPath') + .requiredOption('--githubId ', 'githubId') + .requiredOption('--triggerType ', 'triggerType (push, tag)') + .option('--enableSubmodules', 'enableSubmodules') + .option('--watchPaths ', 'watchPaths') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["enableSubmodules"] != null) opts["enableSubmodules"] = opts["enableSubmodules"] === true || opts["enableSubmodules"] === "true"; + const data = await apiPost("application.saveGithubProvider", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('save-gitlab-provider') + .description('application saveGitlabProvider') + .requiredOption('--applicationId ', 'applicationId') + .requiredOption('--gitlabBranch ', 'gitlabBranch') + .requiredOption('--gitlabBuildPath ', 'gitlabBuildPath') + .requiredOption('--gitlabOwner ', 'gitlabOwner') + .requiredOption('--gitlabRepository ', 'gitlabRepository') + .requiredOption('--gitlabId ', 'gitlabId') + .requiredOption('--gitlabProjectId ', 'gitlabProjectId') + .requiredOption('--gitlabPathNamespace ', 'gitlabPathNamespace') + .option('--enableSubmodules', 'enableSubmodules') + .option('--watchPaths ', 'watchPaths') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["gitlabProjectId"] != null) opts["gitlabProjectId"] = Number(opts["gitlabProjectId"]); + if (opts["enableSubmodules"] != null) opts["enableSubmodules"] = opts["enableSubmodules"] === true || opts["enableSubmodules"] === "true"; + const data = await apiPost("application.saveGitlabProvider", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('save-git-provider') + .description('application saveGitProvider') + .requiredOption('--customGitBranch ', 'customGitBranch') + .requiredOption('--applicationId ', 'applicationId') + .requiredOption('--customGitBuildPath ', 'customGitBuildPath') + .requiredOption('--customGitUrl ', 'customGitUrl') + .requiredOption('--watchPaths ', 'watchPaths') + .option('--enableSubmodules', 'enableSubmodules') + .option('--customGitSSHKeyId ', 'customGitSSHKeyId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["enableSubmodules"] != null) opts["enableSubmodules"] = opts["enableSubmodules"] === true || opts["enableSubmodules"] === "true"; + const data = await apiPost("application.saveGitProvider", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('search') + .description('application search') + .option('--q ', 'q') + .option('--name ', 'name') + .option('--appName ', 'appName') + .option('--description ', 'description') + .option('--repository ', 'repository') + .option('--owner ', 'owner') + .option('--dockerImage ', 'dockerImage') + .option('--projectId ', 'projectId') + .option('--environmentId ', 'environmentId') + .option('--limit ', 'limit') + .option('--offset ', 'offset') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["limit"] != null) opts["limit"] = Number(opts["limit"]); + if (opts["offset"] != null) opts["offset"] = Number(opts["offset"]); + const data = await apiGet("application.search", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('start') + .description('application start') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.start", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('stop') + .description('application stop') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.stop", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('update') + .description('application update') + .requiredOption('--applicationId ', 'applicationId') + .option('--name ', 'name') + .option('--appName ', 'appName') + .option('--description ', 'description') + .option('--env ', 'env') + .option('--previewEnv ', 'previewEnv') + .option('--watchPaths ', 'watchPaths') + .option('--previewBuildArgs ', 'previewBuildArgs') + .option('--previewBuildSecrets ', 'previewBuildSecrets') + .option('--previewLabels ', 'previewLabels') + .option('--previewWildcard ', 'previewWildcard') + .option('--previewPort ', 'previewPort') + .option('--previewHttps', 'previewHttps') + .option('--previewPath ', 'previewPath') + .option('--previewCertificateType ', 'previewCertificateType (letsencrypt, none, custom)') + .option('--previewCustomCertResolver ', 'previewCustomCertResolver') + .option('--previewLimit ', 'previewLimit') + .option('--isPreviewDeploymentsActive', 'isPreviewDeploymentsActive') + .option('--previewRequireCollaboratorPermissions', 'previewRequireCollaboratorPermissions') + .option('--rollbackActive', 'rollbackActive') + .option('--buildArgs ', 'buildArgs') + .option('--buildSecrets ', 'buildSecrets') + .option('--memoryReservation ', 'memoryReservation') + .option('--memoryLimit ', 'memoryLimit') + .option('--cpuReservation ', 'cpuReservation') + .option('--cpuLimit ', 'cpuLimit') + .option('--title ', 'title') + .option('--enabled', 'enabled') + .option('--subtitle ', 'subtitle') + .option('--command ', 'command') + .option('--args ', 'args') + .option('--refreshToken ', 'refreshToken') + .option('--sourceType ', 'sourceType (github, docker, git, gitlab, bitbucket, gitea, drop)') + .option('--cleanCache', 'cleanCache') + .option('--repository ', 'repository') + .option('--owner ', 'owner') + .option('--branch ', 'branch') + .option('--buildPath ', 'buildPath') + .option('--triggerType ', 'triggerType (push, tag)') + .option('--autoDeploy', 'autoDeploy') + .option('--gitlabProjectId ', 'gitlabProjectId') + .option('--gitlabRepository ', 'gitlabRepository') + .option('--gitlabOwner ', 'gitlabOwner') + .option('--gitlabBranch ', 'gitlabBranch') + .option('--gitlabBuildPath ', 'gitlabBuildPath') + .option('--gitlabPathNamespace ', 'gitlabPathNamespace') + .option('--giteaRepository ', 'giteaRepository') + .option('--giteaOwner ', 'giteaOwner') + .option('--giteaBranch ', 'giteaBranch') + .option('--giteaBuildPath ', 'giteaBuildPath') + .option('--bitbucketRepository ', 'bitbucketRepository') + .option('--bitbucketRepositorySlug ', 'bitbucketRepositorySlug') + .option('--bitbucketOwner ', 'bitbucketOwner') + .option('--bitbucketBranch ', 'bitbucketBranch') + .option('--bitbucketBuildPath ', 'bitbucketBuildPath') + .option('--username ', 'username') + .option('--password ', 'password') + .option('--dockerImage ', 'dockerImage') + .option('--registryUrl ', 'registryUrl') + .option('--customGitUrl ', 'customGitUrl') + .option('--customGitBranch ', 'customGitBranch') + .option('--customGitBuildPath ', 'customGitBuildPath') + .option('--customGitSSHKeyId ', 'customGitSSHKeyId') + .option('--enableSubmodules', 'enableSubmodules') + .option('--dockerfile ', 'dockerfile') + .option('--dockerContextPath ', 'dockerContextPath') + .option('--dockerBuildStage ', 'dockerBuildStage') + .option('--dropBuildPath ', 'dropBuildPath') + .option('--healthCheckSwarm ', 'healthCheckSwarm') + .option('--restartPolicySwarm ', 'restartPolicySwarm') + .option('--placementSwarm ', 'placementSwarm') + .option('--updateConfigSwarm ', 'updateConfigSwarm') + .option('--rollbackConfigSwarm ', 'rollbackConfigSwarm') + .option('--modeSwarm ', 'modeSwarm') + .option('--labelsSwarm ', 'labelsSwarm') + .option('--networkSwarm ', 'networkSwarm') + .option('--stopGracePeriodSwarm ', 'stopGracePeriodSwarm') + .option('--endpointSpecSwarm ', 'endpointSpecSwarm') + .option('--ulimitsSwarm ', 'ulimitsSwarm') + .option('--replicas ', 'replicas') + .option('--applicationStatus ', 'applicationStatus (idle, running, done, error)') + .option('--buildType ', 'buildType (dockerfile, heroku_buildpacks, paketo_buildpacks, nixpacks, static, railpack)') + .option('--railpackVersion ', 'railpackVersion') + .option('--herokuVersion ', 'herokuVersion') + .option('--publishDirectory ', 'publishDirectory') + .option('--isStaticSpa', 'isStaticSpa') + .option('--createEnvFile', 'createEnvFile') + .option('--createdAt ', 'createdAt') + .option('--registryId ', 'registryId') + .option('--rollbackRegistryId ', 'rollbackRegistryId') + .option('--environmentId ', 'environmentId') + .option('--githubId ', 'githubId') + .option('--gitlabId ', 'gitlabId') + .option('--giteaId ', 'giteaId') + .option('--bitbucketId ', 'bitbucketId') + .option('--buildServerId ', 'buildServerId') + .option('--buildRegistryId ', 'buildRegistryId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["previewPort"] != null) opts["previewPort"] = Number(opts["previewPort"]); + if (opts["previewHttps"] != null) opts["previewHttps"] = opts["previewHttps"] === true || opts["previewHttps"] === "true"; + if (opts["previewLimit"] != null) opts["previewLimit"] = Number(opts["previewLimit"]); + if (opts["isPreviewDeploymentsActive"] != null) opts["isPreviewDeploymentsActive"] = opts["isPreviewDeploymentsActive"] === true || opts["isPreviewDeploymentsActive"] === "true"; + if (opts["previewRequireCollaboratorPermissions"] != null) opts["previewRequireCollaboratorPermissions"] = opts["previewRequireCollaboratorPermissions"] === true || opts["previewRequireCollaboratorPermissions"] === "true"; + if (opts["rollbackActive"] != null) opts["rollbackActive"] = opts["rollbackActive"] === true || opts["rollbackActive"] === "true"; + if (opts["enabled"] != null) opts["enabled"] = opts["enabled"] === true || opts["enabled"] === "true"; + if (opts["cleanCache"] != null) opts["cleanCache"] = opts["cleanCache"] === true || opts["cleanCache"] === "true"; + if (opts["autoDeploy"] != null) opts["autoDeploy"] = opts["autoDeploy"] === true || opts["autoDeploy"] === "true"; + if (opts["gitlabProjectId"] != null) opts["gitlabProjectId"] = Number(opts["gitlabProjectId"]); + if (opts["enableSubmodules"] != null) opts["enableSubmodules"] = opts["enableSubmodules"] === true || opts["enableSubmodules"] === "true"; + if (opts["replicas"] != null) opts["replicas"] = Number(opts["replicas"]); + if (opts["isStaticSpa"] != null) opts["isStaticSpa"] = opts["isStaticSpa"] === true || opts["isStaticSpa"] === "true"; + if (opts["createEnvFile"] != null) opts["createEnvFile"] = opts["createEnvFile"] === true || opts["createEnvFile"] === "true"; + const data = await apiPost("application.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_application + .command('update-traefik-config') + .description('application updateTraefikConfig') + .requiredOption('--applicationId ', 'applicationId') + .requiredOption('--traefikConfig ', 'traefikConfig') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("application.updateTraefikConfig", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_backup = program.command('backup').description('backup commands'); + + g_backup + .command('create') + .description('backup create') + .requiredOption('--schedule ', 'schedule') + .option('--enabled', 'enabled') + .requiredOption('--prefix ', 'prefix') + .requiredOption('--destinationId ', 'destinationId') + .option('--keepLatestCount ', 'keepLatestCount') + .requiredOption('--database ', 'database') + .option('--mariadbId ', 'mariadbId') + .option('--mysqlId ', 'mysqlId') + .option('--postgresId ', 'postgresId') + .option('--mongoId ', 'mongoId') + .requiredOption('--databaseType ', 'databaseType (postgres, mariadb, mysql, mongo, web-server)') + .option('--userId ', 'userId') + .option('--backupType ', 'backupType (database, compose)') + .option('--composeId ', 'composeId') + .option('--serviceName ', 'serviceName') + .option('--metadata ', 'metadata') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["enabled"] != null) opts["enabled"] = opts["enabled"] === true || opts["enabled"] === "true"; + if (opts["keepLatestCount"] != null) opts["keepLatestCount"] = Number(opts["keepLatestCount"]); + const data = await apiPost("backup.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_backup + .command('list-backup-files') + .description('backup listBackupFiles') + .requiredOption('--destinationId ', 'destinationId') + .requiredOption('--search ', 'search') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("backup.listBackupFiles", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_backup + .command('manual-backup-compose') + .description('backup manualBackupCompose') + .requiredOption('--backupId ', 'backupId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("backup.manualBackupCompose", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_backup + .command('manual-backup-mariadb') + .description('backup manualBackupMariadb') + .requiredOption('--backupId ', 'backupId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("backup.manualBackupMariadb", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_backup + .command('manual-backup-mongo') + .description('backup manualBackupMongo') + .requiredOption('--backupId ', 'backupId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("backup.manualBackupMongo", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_backup + .command('manual-backup-my-sql') + .description('backup manualBackupMySql') + .requiredOption('--backupId ', 'backupId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("backup.manualBackupMySql", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_backup + .command('manual-backup-postgres') + .description('backup manualBackupPostgres') + .requiredOption('--backupId ', 'backupId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("backup.manualBackupPostgres", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_backup + .command('manual-backup-web-server') + .description('backup manualBackupWebServer') + .requiredOption('--backupId ', 'backupId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("backup.manualBackupWebServer", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_backup + .command('one') + .description('backup one') + .requiredOption('--backupId ', 'backupId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("backup.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_backup + .command('remove') + .description('backup remove') + .requiredOption('--backupId ', 'backupId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("backup.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_backup + .command('update') + .description('backup update') + .requiredOption('--schedule ', 'schedule') + .requiredOption('--enabled', 'enabled') + .requiredOption('--prefix ', 'prefix') + .requiredOption('--backupId ', 'backupId') + .requiredOption('--destinationId ', 'destinationId') + .requiredOption('--database ', 'database') + .requiredOption('--keepLatestCount ', 'keepLatestCount') + .requiredOption('--serviceName ', 'serviceName') + .requiredOption('--metadata ', 'metadata') + .requiredOption('--databaseType ', 'databaseType (postgres, mariadb, mysql, mongo, web-server)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["enabled"] != null) opts["enabled"] = opts["enabled"] === true || opts["enabled"] === "true"; + if (opts["keepLatestCount"] != null) opts["keepLatestCount"] = Number(opts["keepLatestCount"]); + const data = await apiPost("backup.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_bitbucket = program.command('bitbucket').description('bitbucket commands'); + + g_bitbucket + .command('bitbucket-providers') + .description('bitbucket bitbucketProviders') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("bitbucket.bitbucketProviders", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_bitbucket + .command('create') + .description('bitbucket create') + .option('--bitbucketId ', 'bitbucketId') + .option('--bitbucketUsername ', 'bitbucketUsername') + .option('--bitbucketEmail ', 'bitbucketEmail') + .option('--appPassword ', 'appPassword') + .option('--apiToken ', 'apiToken') + .option('--bitbucketWorkspaceName ', 'bitbucketWorkspaceName') + .option('--gitProviderId ', 'gitProviderId') + .requiredOption('--authId ', 'authId') + .requiredOption('--name ', 'name') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("bitbucket.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_bitbucket + .command('get-bitbucket-branches') + .description('bitbucket getBitbucketBranches') + .requiredOption('--owner ', 'owner') + .requiredOption('--repo ', 'repo') + .option('--bitbucketId ', 'bitbucketId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("bitbucket.getBitbucketBranches", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_bitbucket + .command('get-bitbucket-repositories') + .description('bitbucket getBitbucketRepositories') + .requiredOption('--bitbucketId ', 'bitbucketId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("bitbucket.getBitbucketRepositories", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_bitbucket + .command('one') + .description('bitbucket one') + .requiredOption('--bitbucketId ', 'bitbucketId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("bitbucket.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_bitbucket + .command('test-connection') + .description('bitbucket testConnection') + .requiredOption('--bitbucketId ', 'bitbucketId') + .option('--bitbucketUsername ', 'bitbucketUsername') + .option('--bitbucketEmail ', 'bitbucketEmail') + .option('--workspaceName ', 'workspaceName') + .option('--apiToken ', 'apiToken') + .option('--appPassword ', 'appPassword') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("bitbucket.testConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_bitbucket + .command('update') + .description('bitbucket update') + .requiredOption('--bitbucketId ', 'bitbucketId') + .option('--bitbucketUsername ', 'bitbucketUsername') + .option('--bitbucketEmail ', 'bitbucketEmail') + .option('--appPassword ', 'appPassword') + .option('--apiToken ', 'apiToken') + .option('--bitbucketWorkspaceName ', 'bitbucketWorkspaceName') + .requiredOption('--gitProviderId ', 'gitProviderId') + .requiredOption('--name ', 'name') + .option('--organizationId ', 'organizationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("bitbucket.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_certificates = program.command('certificates').description('certificates commands'); + + g_certificates + .command('all') + .description('certificates all') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("certificates.all", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_certificates + .command('create') + .description('certificates create') + .option('--certificateId ', 'certificateId') + .requiredOption('--name ', 'name') + .requiredOption('--certificateData ', 'certificateData') + .requiredOption('--privateKey ', 'privateKey') + .option('--certificatePath ', 'certificatePath') + .option('--autoRenew', 'autoRenew') + .requiredOption('--organizationId ', 'organizationId') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["autoRenew"] != null) opts["autoRenew"] = opts["autoRenew"] === true || opts["autoRenew"] === "true"; + const data = await apiPost("certificates.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_certificates + .command('one') + .description('certificates one') + .requiredOption('--certificateId ', 'certificateId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("certificates.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_certificates + .command('remove') + .description('certificates remove') + .requiredOption('--certificateId ', 'certificateId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("certificates.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_cluster = program.command('cluster').description('cluster commands'); + + g_cluster + .command('add-manager') + .description('cluster addManager') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("cluster.addManager", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_cluster + .command('add-worker') + .description('cluster addWorker') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("cluster.addWorker", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_cluster + .command('get-nodes') + .description('cluster getNodes') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("cluster.getNodes", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_cluster + .command('remove-worker') + .description('cluster removeWorker') + .requiredOption('--nodeId ', 'nodeId') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("cluster.removeWorker", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_compose = program.command('compose').description('compose commands'); + + g_compose + .command('cancel-deployment') + .description('compose cancelDeployment') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.cancelDeployment", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('clean-queues') + .description('compose cleanQueues') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.cleanQueues", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('clear-deployments') + .description('compose clearDeployments') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.clearDeployments", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('create') + .description('compose create') + .requiredOption('--name ', 'name') + .option('--description ', 'description') + .requiredOption('--environmentId ', 'environmentId') + .option('--composeType ', 'composeType (docker-compose, stack)') + .option('--appName ', 'appName') + .option('--serverId ', 'serverId') + .option('--composeFile ', 'composeFile') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('delete') + .description('compose delete') + .requiredOption('--composeId ', 'composeId') + .requiredOption('--deleteVolumes', 'deleteVolumes') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["deleteVolumes"] != null) opts["deleteVolumes"] = opts["deleteVolumes"] === true || opts["deleteVolumes"] === "true"; + const data = await apiPost("compose.delete", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('deploy') + .description('compose deploy') + .requiredOption('--composeId ', 'composeId') + .option('--title ', 'title') + .option('--description ', 'description') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.deploy", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('deploy-template') + .description('compose deployTemplate') + .requiredOption('--environmentId ', 'environmentId') + .option('--serverId ', 'serverId') + .requiredOption('--id ', 'id') + .option('--baseUrl ', 'baseUrl') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.deployTemplate", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('disconnect-git-provider') + .description('compose disconnectGitProvider') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.disconnectGitProvider", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('fetch-source-type') + .description('compose fetchSourceType') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.fetchSourceType", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('get-converted-compose') + .description('compose getConvertedCompose') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("compose.getConvertedCompose", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('get-default-command') + .description('compose getDefaultCommand') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("compose.getDefaultCommand", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('get-tags') + .description('compose getTags') + .option('--baseUrl ', 'baseUrl') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("compose.getTags", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('import') + .description('compose import') + .requiredOption('--base64 ', 'base64') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.import", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('isolated-deployment') + .description('compose isolatedDeployment') + .requiredOption('--composeId ', 'composeId') + .option('--suffix ', 'suffix') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.isolatedDeployment", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('kill-build') + .description('compose killBuild') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.killBuild", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('load-mounts-by-service') + .description('compose loadMountsByService') + .requiredOption('--composeId ', 'composeId') + .requiredOption('--serviceName ', 'serviceName') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("compose.loadMountsByService", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('load-services') + .description('compose loadServices') + .requiredOption('--composeId ', 'composeId') + .option('--type ', 'type (fetch, cache)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("compose.loadServices", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('move') + .description('compose move') + .requiredOption('--composeId ', 'composeId') + .requiredOption('--targetEnvironmentId ', 'targetEnvironmentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.move", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('one') + .description('compose one') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("compose.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('process-template') + .description('compose processTemplate') + .requiredOption('--base64 ', 'base64') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.processTemplate", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('randomize-compose') + .description('compose randomizeCompose') + .requiredOption('--composeId ', 'composeId') + .option('--suffix ', 'suffix') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.randomizeCompose", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('redeploy') + .description('compose redeploy') + .requiredOption('--composeId ', 'composeId') + .option('--title ', 'title') + .option('--description ', 'description') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.redeploy", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('refresh-token') + .description('compose refreshToken') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.refreshToken", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('search') + .description('compose search') + .option('--q ', 'q') + .option('--name ', 'name') + .option('--appName ', 'appName') + .option('--description ', 'description') + .option('--projectId ', 'projectId') + .option('--environmentId ', 'environmentId') + .option('--limit ', 'limit') + .option('--offset ', 'offset') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["limit"] != null) opts["limit"] = Number(opts["limit"]); + if (opts["offset"] != null) opts["offset"] = Number(opts["offset"]); + const data = await apiGet("compose.search", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('start') + .description('compose start') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.start", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('stop') + .description('compose stop') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("compose.stop", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('templates') + .description('compose templates') + .option('--baseUrl ', 'baseUrl') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("compose.templates", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_compose + .command('update') + .description('compose update') + .requiredOption('--composeId ', 'composeId') + .option('--name ', 'name') + .option('--appName ', 'appName') + .option('--description ', 'description') + .option('--env ', 'env') + .option('--composeFile ', 'composeFile') + .option('--refreshToken ', 'refreshToken') + .option('--sourceType ', 'sourceType (git, github, gitlab, bitbucket, gitea, raw)') + .option('--composeType ', 'composeType (docker-compose, stack)') + .option('--repository ', 'repository') + .option('--owner ', 'owner') + .option('--branch ', 'branch') + .option('--autoDeploy', 'autoDeploy') + .option('--gitlabProjectId ', 'gitlabProjectId') + .option('--gitlabRepository ', 'gitlabRepository') + .option('--gitlabOwner ', 'gitlabOwner') + .option('--gitlabBranch ', 'gitlabBranch') + .option('--gitlabPathNamespace ', 'gitlabPathNamespace') + .option('--bitbucketRepository ', 'bitbucketRepository') + .option('--bitbucketRepositorySlug ', 'bitbucketRepositorySlug') + .option('--bitbucketOwner ', 'bitbucketOwner') + .option('--bitbucketBranch ', 'bitbucketBranch') + .option('--giteaRepository ', 'giteaRepository') + .option('--giteaOwner ', 'giteaOwner') + .option('--giteaBranch ', 'giteaBranch') + .option('--customGitUrl ', 'customGitUrl') + .option('--customGitBranch ', 'customGitBranch') + .option('--customGitSSHKeyId ', 'customGitSSHKeyId') + .option('--command ', 'command') + .option('--enableSubmodules', 'enableSubmodules') + .option('--composePath ', 'composePath') + .option('--suffix ', 'suffix') + .option('--randomize', 'randomize') + .option('--isolatedDeployment', 'isolatedDeployment') + .option('--isolatedDeploymentsVolume', 'isolatedDeploymentsVolume') + .option('--triggerType ', 'triggerType (push, tag)') + .option('--composeStatus ', 'composeStatus (idle, running, done, error)') + .option('--environmentId ', 'environmentId') + .option('--createdAt ', 'createdAt') + .option('--watchPaths ', 'watchPaths') + .option('--githubId ', 'githubId') + .option('--gitlabId ', 'gitlabId') + .option('--bitbucketId ', 'bitbucketId') + .option('--giteaId ', 'giteaId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["autoDeploy"] != null) opts["autoDeploy"] = opts["autoDeploy"] === true || opts["autoDeploy"] === "true"; + if (opts["gitlabProjectId"] != null) opts["gitlabProjectId"] = Number(opts["gitlabProjectId"]); + if (opts["enableSubmodules"] != null) opts["enableSubmodules"] = opts["enableSubmodules"] === true || opts["enableSubmodules"] === "true"; + if (opts["randomize"] != null) opts["randomize"] = opts["randomize"] === true || opts["randomize"] === "true"; + if (opts["isolatedDeployment"] != null) opts["isolatedDeployment"] = opts["isolatedDeployment"] === true || opts["isolatedDeployment"] === "true"; + if (opts["isolatedDeploymentsVolume"] != null) opts["isolatedDeploymentsVolume"] = opts["isolatedDeploymentsVolume"] === true || opts["isolatedDeploymentsVolume"] === "true"; + const data = await apiPost("compose.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_deployment = program.command('deployment').description('deployment commands'); + + g_deployment + .command('all') + .description('deployment all') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("deployment.all", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_deployment + .command('all-by-compose') + .description('deployment allByCompose') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("deployment.allByCompose", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_deployment + .command('all-by-server') + .description('deployment allByServer') + .requiredOption('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("deployment.allByServer", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_deployment + .command('all-by-type') + .description('deployment allByType') + .requiredOption('--id ', 'id') + .requiredOption('--type ', 'type (application, compose, server, schedule, previewDeployment, backup, volumeBackup)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("deployment.allByType", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_deployment + .command('all-centralized') + .description('deployment allCentralized') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("deployment.allCentralized", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_deployment + .command('kill-process') + .description('deployment killProcess') + .requiredOption('--deploymentId ', 'deploymentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("deployment.killProcess", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_deployment + .command('queue-list') + .description('deployment queueList') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("deployment.queueList", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_deployment + .command('remove-deployment') + .description('deployment removeDeployment') + .requiredOption('--deploymentId ', 'deploymentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("deployment.removeDeployment", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_destination = program.command('destination').description('destination commands'); + + g_destination + .command('all') + .description('destination all') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("destination.all", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_destination + .command('create') + .description('destination create') + .requiredOption('--name ', 'name') + .requiredOption('--provider ', 'provider') + .requiredOption('--accessKey ', 'accessKey') + .requiredOption('--bucket ', 'bucket') + .requiredOption('--region ', 'region') + .requiredOption('--endpoint ', 'endpoint') + .requiredOption('--secretAccessKey ', 'secretAccessKey') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("destination.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_destination + .command('one') + .description('destination one') + .requiredOption('--destinationId ', 'destinationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("destination.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_destination + .command('remove') + .description('destination remove') + .requiredOption('--destinationId ', 'destinationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("destination.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_destination + .command('test-connection') + .description('destination testConnection') + .requiredOption('--name ', 'name') + .requiredOption('--provider ', 'provider') + .requiredOption('--accessKey ', 'accessKey') + .requiredOption('--bucket ', 'bucket') + .requiredOption('--region ', 'region') + .requiredOption('--endpoint ', 'endpoint') + .requiredOption('--secretAccessKey ', 'secretAccessKey') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("destination.testConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_destination + .command('update') + .description('destination update') + .requiredOption('--name ', 'name') + .requiredOption('--accessKey ', 'accessKey') + .requiredOption('--bucket ', 'bucket') + .requiredOption('--region ', 'region') + .requiredOption('--endpoint ', 'endpoint') + .requiredOption('--secretAccessKey ', 'secretAccessKey') + .requiredOption('--destinationId ', 'destinationId') + .requiredOption('--provider ', 'provider') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("destination.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_docker = program.command('docker').description('docker commands'); + + g_docker + .command('get-config') + .description('docker getConfig') + .requiredOption('--containerId ', 'containerId') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("docker.getConfig", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_docker + .command('get-containers') + .description('docker getContainers') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("docker.getContainers", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_docker + .command('get-containers-by-app-label') + .description('docker getContainersByAppLabel') + .requiredOption('--appName ', 'appName') + .option('--serverId ', 'serverId') + .requiredOption('--type ', 'type (standalone, swarm)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("docker.getContainersByAppLabel", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_docker + .command('get-containers-by-app-name-match') + .description('docker getContainersByAppNameMatch') + .option('--appType ', 'appType (stack, docker-compose)') + .requiredOption('--appName ', 'appName') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("docker.getContainersByAppNameMatch", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_docker + .command('get-service-containers-by-app-name') + .description('docker getServiceContainersByAppName') + .requiredOption('--appName ', 'appName') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("docker.getServiceContainersByAppName", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_docker + .command('get-stack-containers-by-app-name') + .description('docker getStackContainersByAppName') + .requiredOption('--appName ', 'appName') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("docker.getStackContainersByAppName", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_docker + .command('restart-container') + .description('docker restartContainer') + .requiredOption('--containerId ', 'containerId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("docker.restartContainer", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_domain = program.command('domain').description('domain commands'); + + g_domain + .command('by-application-id') + .description('domain byApplicationId') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("domain.byApplicationId", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_domain + .command('by-compose-id') + .description('domain byComposeId') + .requiredOption('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("domain.byComposeId", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_domain + .command('can-generate-traefik-me-domains') + .description('domain canGenerateTraefikMeDomains') + .requiredOption('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("domain.canGenerateTraefikMeDomains", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_domain + .command('create') + .description('domain create') + .requiredOption('--host ', 'host') + .option('--path ', 'path') + .option('--port ', 'port') + .option('--https', 'https') + .option('--applicationId ', 'applicationId') + .option('--certificateType ', 'certificateType (letsencrypt, none, custom)') + .option('--customCertResolver ', 'customCertResolver') + .option('--composeId ', 'composeId') + .option('--serviceName ', 'serviceName') + .option('--domainType ', 'domainType (compose, application, preview)') + .option('--previewDeploymentId ', 'previewDeploymentId') + .option('--internalPath ', 'internalPath') + .option('--stripPath', 'stripPath') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["port"] != null) opts["port"] = Number(opts["port"]); + if (opts["https"] != null) opts["https"] = opts["https"] === true || opts["https"] === "true"; + if (opts["stripPath"] != null) opts["stripPath"] = opts["stripPath"] === true || opts["stripPath"] === "true"; + const data = await apiPost("domain.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_domain + .command('delete') + .description('domain delete') + .requiredOption('--domainId ', 'domainId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("domain.delete", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_domain + .command('generate-domain') + .description('domain generateDomain') + .requiredOption('--appName ', 'appName') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("domain.generateDomain", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_domain + .command('one') + .description('domain one') + .requiredOption('--domainId ', 'domainId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("domain.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_domain + .command('update') + .description('domain update') + .requiredOption('--host ', 'host') + .option('--path ', 'path') + .option('--port ', 'port') + .option('--https', 'https') + .option('--certificateType ', 'certificateType (letsencrypt, none, custom)') + .option('--customCertResolver ', 'customCertResolver') + .option('--serviceName ', 'serviceName') + .option('--domainType ', 'domainType (compose, application, preview)') + .option('--internalPath ', 'internalPath') + .option('--stripPath', 'stripPath') + .requiredOption('--domainId ', 'domainId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["port"] != null) opts["port"] = Number(opts["port"]); + if (opts["https"] != null) opts["https"] = opts["https"] === true || opts["https"] === "true"; + if (opts["stripPath"] != null) opts["stripPath"] = opts["stripPath"] === true || opts["stripPath"] === "true"; + const data = await apiPost("domain.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_domain + .command('validate-domain') + .description('domain validateDomain') + .requiredOption('--domain ', 'domain') + .option('--serverIp ', 'serverIp') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("domain.validateDomain", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_environment = program.command('environment').description('environment commands'); + + g_environment + .command('by-project-id') + .description('environment byProjectId') + .requiredOption('--projectId ', 'projectId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("environment.byProjectId", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_environment + .command('create') + .description('environment create') + .requiredOption('--name ', 'name') + .option('--description ', 'description') + .requiredOption('--projectId ', 'projectId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("environment.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_environment + .command('duplicate') + .description('environment duplicate') + .requiredOption('--environmentId ', 'environmentId') + .requiredOption('--name ', 'name') + .option('--description ', 'description') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("environment.duplicate", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_environment + .command('one') + .description('environment one') + .requiredOption('--environmentId ', 'environmentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("environment.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_environment + .command('remove') + .description('environment remove') + .requiredOption('--environmentId ', 'environmentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("environment.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_environment + .command('search') + .description('environment search') + .option('--q ', 'q') + .option('--name ', 'name') + .option('--description ', 'description') + .option('--projectId ', 'projectId') + .option('--limit ', 'limit') + .option('--offset ', 'offset') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["limit"] != null) opts["limit"] = Number(opts["limit"]); + if (opts["offset"] != null) opts["offset"] = Number(opts["offset"]); + const data = await apiGet("environment.search", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_environment + .command('update') + .description('environment update') + .requiredOption('--environmentId ', 'environmentId') + .option('--name ', 'name') + .option('--description ', 'description') + .option('--projectId ', 'projectId') + .option('--env ', 'env') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("environment.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_gitea = program.command('gitea').description('gitea commands'); + + g_gitea + .command('create') + .description('gitea create') + .option('--giteaId ', 'giteaId') + .requiredOption('--giteaUrl ', 'giteaUrl') + .option('--giteaInternalUrl ', 'giteaInternalUrl') + .option('--redirectUri ', 'redirectUri') + .option('--clientId ', 'clientId') + .option('--clientSecret ', 'clientSecret') + .option('--gitProviderId ', 'gitProviderId') + .option('--accessToken ', 'accessToken') + .option('--refreshToken ', 'refreshToken') + .option('--expiresAt ', 'expiresAt') + .option('--scopes ', 'scopes') + .option('--lastAuthenticatedAt ', 'lastAuthenticatedAt') + .requiredOption('--name ', 'name') + .option('--giteaUsername ', 'giteaUsername') + .option('--organizationName ', 'organizationName') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["expiresAt"] != null) opts["expiresAt"] = Number(opts["expiresAt"]); + if (opts["lastAuthenticatedAt"] != null) opts["lastAuthenticatedAt"] = Number(opts["lastAuthenticatedAt"]); + const data = await apiPost("gitea.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_gitea + .command('get-gitea-branches') + .description('gitea getGiteaBranches') + .requiredOption('--owner ', 'owner') + .requiredOption('--repositoryName ', 'repositoryName') + .option('--giteaId ', 'giteaId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("gitea.getGiteaBranches", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_gitea + .command('get-gitea-repositories') + .description('gitea getGiteaRepositories') + .requiredOption('--giteaId ', 'giteaId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("gitea.getGiteaRepositories", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_gitea + .command('get-gitea-url') + .description('gitea getGiteaUrl') + .requiredOption('--giteaId ', 'giteaId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("gitea.getGiteaUrl", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_gitea + .command('gitea-providers') + .description('gitea giteaProviders') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("gitea.giteaProviders", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_gitea + .command('one') + .description('gitea one') + .requiredOption('--giteaId ', 'giteaId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("gitea.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_gitea + .command('test-connection') + .description('gitea testConnection') + .option('--giteaId ', 'giteaId') + .option('--organizationName ', 'organizationName') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("gitea.testConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_gitea + .command('update') + .description('gitea update') + .requiredOption('--giteaId ', 'giteaId') + .requiredOption('--giteaUrl ', 'giteaUrl') + .option('--giteaInternalUrl ', 'giteaInternalUrl') + .option('--redirectUri ', 'redirectUri') + .option('--clientId ', 'clientId') + .option('--clientSecret ', 'clientSecret') + .requiredOption('--gitProviderId ', 'gitProviderId') + .option('--accessToken ', 'accessToken') + .option('--refreshToken ', 'refreshToken') + .option('--expiresAt ', 'expiresAt') + .option('--scopes ', 'scopes') + .option('--lastAuthenticatedAt ', 'lastAuthenticatedAt') + .requiredOption('--name ', 'name') + .option('--giteaUsername ', 'giteaUsername') + .option('--organizationName ', 'organizationName') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["expiresAt"] != null) opts["expiresAt"] = Number(opts["expiresAt"]); + if (opts["lastAuthenticatedAt"] != null) opts["lastAuthenticatedAt"] = Number(opts["lastAuthenticatedAt"]); + const data = await apiPost("gitea.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_github = program.command('github').description('github commands'); + + g_github + .command('get-github-branches') + .description('github getGithubBranches') + .requiredOption('--repo ', 'repo') + .requiredOption('--owner ', 'owner') + .option('--githubId ', 'githubId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("github.getGithubBranches", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_github + .command('get-github-repositories') + .description('github getGithubRepositories') + .requiredOption('--githubId ', 'githubId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("github.getGithubRepositories", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_github + .command('github-providers') + .description('github githubProviders') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("github.githubProviders", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_github + .command('one') + .description('github one') + .requiredOption('--githubId ', 'githubId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("github.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_github + .command('test-connection') + .description('github testConnection') + .requiredOption('--githubId ', 'githubId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("github.testConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_github + .command('update') + .description('github update') + .requiredOption('--githubId ', 'githubId') + .requiredOption('--name ', 'name') + .requiredOption('--gitProviderId ', 'gitProviderId') + .requiredOption('--githubAppName ', 'githubAppName') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("github.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_gitlab = program.command('gitlab').description('gitlab commands'); + + g_gitlab + .command('create') + .description('gitlab create') + .option('--applicationId ', 'applicationId') + .option('--secret ', 'secret') + .option('--groupName ', 'groupName') + .option('--gitProviderId ', 'gitProviderId') + .option('--redirectUri ', 'redirectUri') + .requiredOption('--authId ', 'authId') + .requiredOption('--name ', 'name') + .requiredOption('--gitlabUrl ', 'gitlabUrl') + .option('--gitlabInternalUrl ', 'gitlabInternalUrl') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("gitlab.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_gitlab + .command('get-gitlab-branches') + .description('gitlab getGitlabBranches') + .option('--id ', 'id') + .requiredOption('--owner ', 'owner') + .requiredOption('--repo ', 'repo') + .option('--gitlabId ', 'gitlabId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["id"] != null) opts["id"] = Number(opts["id"]); + const data = await apiGet("gitlab.getGitlabBranches", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_gitlab + .command('get-gitlab-repositories') + .description('gitlab getGitlabRepositories') + .requiredOption('--gitlabId ', 'gitlabId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("gitlab.getGitlabRepositories", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_gitlab + .command('gitlab-providers') + .description('gitlab gitlabProviders') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("gitlab.gitlabProviders", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_gitlab + .command('one') + .description('gitlab one') + .requiredOption('--gitlabId ', 'gitlabId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("gitlab.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_gitlab + .command('test-connection') + .description('gitlab testConnection') + .requiredOption('--gitlabId ', 'gitlabId') + .option('--groupName ', 'groupName') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("gitlab.testConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_gitlab + .command('update') + .description('gitlab update') + .option('--applicationId ', 'applicationId') + .option('--secret ', 'secret') + .option('--groupName ', 'groupName') + .option('--redirectUri ', 'redirectUri') + .requiredOption('--name ', 'name') + .requiredOption('--gitlabId ', 'gitlabId') + .requiredOption('--gitlabUrl ', 'gitlabUrl') + .requiredOption('--gitProviderId ', 'gitProviderId') + .option('--gitlabInternalUrl ', 'gitlabInternalUrl') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("gitlab.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_gitProvider = program.command('git-provider').description('git-provider commands'); + + g_gitProvider + .command('get-all') + .description('gitProvider getAll') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("gitProvider.getAll", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_gitProvider + .command('remove') + .description('gitProvider remove') + .requiredOption('--gitProviderId ', 'gitProviderId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("gitProvider.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_licenseKey = program.command('license-key').description('license-key commands'); + + g_licenseKey + .command('activate') + .description('licenseKey activate') + .requiredOption('--licenseKey ', 'licenseKey') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("licenseKey.activate", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_licenseKey + .command('deactivate') + .description('licenseKey deactivate') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("licenseKey.deactivate", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_licenseKey + .command('get-enterprise-settings') + .description('licenseKey getEnterpriseSettings') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("licenseKey.getEnterpriseSettings", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_licenseKey + .command('have-valid-license-key') + .description('licenseKey haveValidLicenseKey') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("licenseKey.haveValidLicenseKey", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_licenseKey + .command('update-enterprise-settings') + .description('licenseKey updateEnterpriseSettings') + .option('--enableEnterpriseFeatures', 'enableEnterpriseFeatures') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["enableEnterpriseFeatures"] != null) opts["enableEnterpriseFeatures"] = opts["enableEnterpriseFeatures"] === true || opts["enableEnterpriseFeatures"] === "true"; + const data = await apiPost("licenseKey.updateEnterpriseSettings", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_licenseKey + .command('validate') + .description('licenseKey validate') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("licenseKey.validate", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_mariadb = program.command('mariadb').description('mariadb commands'); + + g_mariadb + .command('change-status') + .description('mariadb changeStatus') + .requiredOption('--mariadbId ', 'mariadbId') + .requiredOption('--applicationStatus ', 'applicationStatus (idle, running, done, error)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mariadb.changeStatus", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mariadb + .command('create') + .description('mariadb create') + .requiredOption('--name ', 'name') + .option('--appName ', 'appName') + .option('--dockerImage ', 'dockerImage') + .option('--databaseRootPassword ', 'databaseRootPassword') + .requiredOption('--environmentId ', 'environmentId') + .option('--description ', 'description') + .requiredOption('--databaseName ', 'databaseName') + .requiredOption('--databaseUser ', 'databaseUser') + .requiredOption('--databasePassword ', 'databasePassword') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mariadb.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mariadb + .command('deploy') + .description('mariadb deploy') + .requiredOption('--mariadbId ', 'mariadbId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mariadb.deploy", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mariadb + .command('move') + .description('mariadb move') + .requiredOption('--mariadbId ', 'mariadbId') + .requiredOption('--targetEnvironmentId ', 'targetEnvironmentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mariadb.move", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mariadb + .command('one') + .description('mariadb one') + .requiredOption('--mariadbId ', 'mariadbId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("mariadb.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mariadb + .command('rebuild') + .description('mariadb rebuild') + .requiredOption('--mariadbId ', 'mariadbId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mariadb.rebuild", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mariadb + .command('reload') + .description('mariadb reload') + .requiredOption('--mariadbId ', 'mariadbId') + .requiredOption('--appName ', 'appName') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mariadb.reload", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mariadb + .command('remove') + .description('mariadb remove') + .requiredOption('--mariadbId ', 'mariadbId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mariadb.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mariadb + .command('save-environment') + .description('mariadb saveEnvironment') + .requiredOption('--mariadbId ', 'mariadbId') + .requiredOption('--env ', 'env') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mariadb.saveEnvironment", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mariadb + .command('save-external-port') + .description('mariadb saveExternalPort') + .requiredOption('--mariadbId ', 'mariadbId') + .requiredOption('--externalPort ', 'externalPort') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["externalPort"] != null) opts["externalPort"] = Number(opts["externalPort"]); + const data = await apiPost("mariadb.saveExternalPort", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mariadb + .command('search') + .description('mariadb search') + .option('--q ', 'q') + .option('--name ', 'name') + .option('--appName ', 'appName') + .option('--description ', 'description') + .option('--projectId ', 'projectId') + .option('--environmentId ', 'environmentId') + .option('--limit ', 'limit') + .option('--offset ', 'offset') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["limit"] != null) opts["limit"] = Number(opts["limit"]); + if (opts["offset"] != null) opts["offset"] = Number(opts["offset"]); + const data = await apiGet("mariadb.search", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mariadb + .command('start') + .description('mariadb start') + .requiredOption('--mariadbId ', 'mariadbId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mariadb.start", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mariadb + .command('stop') + .description('mariadb stop') + .requiredOption('--mariadbId ', 'mariadbId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mariadb.stop", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mariadb + .command('update') + .description('mariadb update') + .requiredOption('--mariadbId ', 'mariadbId') + .option('--name ', 'name') + .option('--appName ', 'appName') + .option('--description ', 'description') + .option('--databaseName ', 'databaseName') + .option('--databaseUser ', 'databaseUser') + .option('--databasePassword ', 'databasePassword') + .option('--databaseRootPassword ', 'databaseRootPassword') + .option('--dockerImage ', 'dockerImage') + .option('--command ', 'command') + .option('--args ', 'args') + .option('--env ', 'env') + .option('--memoryReservation ', 'memoryReservation') + .option('--memoryLimit ', 'memoryLimit') + .option('--cpuReservation ', 'cpuReservation') + .option('--cpuLimit ', 'cpuLimit') + .option('--externalPort ', 'externalPort') + .option('--applicationStatus ', 'applicationStatus (idle, running, done, error)') + .option('--healthCheckSwarm ', 'healthCheckSwarm') + .option('--restartPolicySwarm ', 'restartPolicySwarm') + .option('--placementSwarm ', 'placementSwarm') + .option('--updateConfigSwarm ', 'updateConfigSwarm') + .option('--rollbackConfigSwarm ', 'rollbackConfigSwarm') + .option('--modeSwarm ', 'modeSwarm') + .option('--labelsSwarm ', 'labelsSwarm') + .option('--networkSwarm ', 'networkSwarm') + .option('--stopGracePeriodSwarm ', 'stopGracePeriodSwarm') + .option('--endpointSpecSwarm ', 'endpointSpecSwarm') + .option('--ulimitsSwarm ', 'ulimitsSwarm') + .option('--replicas ', 'replicas') + .option('--createdAt ', 'createdAt') + .option('--environmentId ', 'environmentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["externalPort"] != null) opts["externalPort"] = Number(opts["externalPort"]); + if (opts["replicas"] != null) opts["replicas"] = Number(opts["replicas"]); + const data = await apiPost("mariadb.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_mongo = program.command('mongo').description('mongo commands'); + + g_mongo + .command('change-status') + .description('mongo changeStatus') + .requiredOption('--mongoId ', 'mongoId') + .requiredOption('--applicationStatus ', 'applicationStatus (idle, running, done, error)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mongo.changeStatus", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mongo + .command('create') + .description('mongo create') + .requiredOption('--name ', 'name') + .option('--appName ', 'appName') + .option('--dockerImage ', 'dockerImage') + .requiredOption('--environmentId ', 'environmentId') + .option('--description ', 'description') + .requiredOption('--databaseUser ', 'databaseUser') + .requiredOption('--databasePassword ', 'databasePassword') + .option('--serverId ', 'serverId') + .option('--replicaSets', 'replicaSets') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["replicaSets"] != null) opts["replicaSets"] = opts["replicaSets"] === true || opts["replicaSets"] === "true"; + const data = await apiPost("mongo.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mongo + .command('deploy') + .description('mongo deploy') + .requiredOption('--mongoId ', 'mongoId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mongo.deploy", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mongo + .command('move') + .description('mongo move') + .requiredOption('--mongoId ', 'mongoId') + .requiredOption('--targetEnvironmentId ', 'targetEnvironmentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mongo.move", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mongo + .command('one') + .description('mongo one') + .requiredOption('--mongoId ', 'mongoId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("mongo.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mongo + .command('rebuild') + .description('mongo rebuild') + .requiredOption('--mongoId ', 'mongoId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mongo.rebuild", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mongo + .command('reload') + .description('mongo reload') + .requiredOption('--mongoId ', 'mongoId') + .requiredOption('--appName ', 'appName') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mongo.reload", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mongo + .command('remove') + .description('mongo remove') + .requiredOption('--mongoId ', 'mongoId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mongo.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mongo + .command('save-environment') + .description('mongo saveEnvironment') + .requiredOption('--mongoId ', 'mongoId') + .requiredOption('--env ', 'env') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mongo.saveEnvironment", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mongo + .command('save-external-port') + .description('mongo saveExternalPort') + .requiredOption('--mongoId ', 'mongoId') + .requiredOption('--externalPort ', 'externalPort') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["externalPort"] != null) opts["externalPort"] = Number(opts["externalPort"]); + const data = await apiPost("mongo.saveExternalPort", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mongo + .command('search') + .description('mongo search') + .option('--q ', 'q') + .option('--name ', 'name') + .option('--appName ', 'appName') + .option('--description ', 'description') + .option('--projectId ', 'projectId') + .option('--environmentId ', 'environmentId') + .option('--limit ', 'limit') + .option('--offset ', 'offset') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["limit"] != null) opts["limit"] = Number(opts["limit"]); + if (opts["offset"] != null) opts["offset"] = Number(opts["offset"]); + const data = await apiGet("mongo.search", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mongo + .command('start') + .description('mongo start') + .requiredOption('--mongoId ', 'mongoId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mongo.start", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mongo + .command('stop') + .description('mongo stop') + .requiredOption('--mongoId ', 'mongoId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mongo.stop", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mongo + .command('update') + .description('mongo update') + .requiredOption('--mongoId ', 'mongoId') + .option('--name ', 'name') + .option('--appName ', 'appName') + .option('--description ', 'description') + .option('--databaseUser ', 'databaseUser') + .option('--databasePassword ', 'databasePassword') + .option('--dockerImage ', 'dockerImage') + .option('--command ', 'command') + .option('--args ', 'args') + .option('--env ', 'env') + .option('--memoryReservation ', 'memoryReservation') + .option('--memoryLimit ', 'memoryLimit') + .option('--cpuReservation ', 'cpuReservation') + .option('--cpuLimit ', 'cpuLimit') + .option('--externalPort ', 'externalPort') + .option('--applicationStatus ', 'applicationStatus (idle, running, done, error)') + .option('--healthCheckSwarm ', 'healthCheckSwarm') + .option('--restartPolicySwarm ', 'restartPolicySwarm') + .option('--placementSwarm ', 'placementSwarm') + .option('--updateConfigSwarm ', 'updateConfigSwarm') + .option('--rollbackConfigSwarm ', 'rollbackConfigSwarm') + .option('--modeSwarm ', 'modeSwarm') + .option('--labelsSwarm ', 'labelsSwarm') + .option('--networkSwarm ', 'networkSwarm') + .option('--stopGracePeriodSwarm ', 'stopGracePeriodSwarm') + .option('--endpointSpecSwarm ', 'endpointSpecSwarm') + .option('--ulimitsSwarm ', 'ulimitsSwarm') + .option('--replicas ', 'replicas') + .option('--createdAt ', 'createdAt') + .option('--environmentId ', 'environmentId') + .option('--replicaSets', 'replicaSets') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["externalPort"] != null) opts["externalPort"] = Number(opts["externalPort"]); + if (opts["replicas"] != null) opts["replicas"] = Number(opts["replicas"]); + if (opts["replicaSets"] != null) opts["replicaSets"] = opts["replicaSets"] === true || opts["replicaSets"] === "true"; + const data = await apiPost("mongo.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_mounts = program.command('mounts').description('mounts commands'); + + g_mounts + .command('all-named-by-application-id') + .description('mounts allNamedByApplicationId') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("mounts.allNamedByApplicationId", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mounts + .command('create') + .description('mounts create') + .requiredOption('--type ', 'type (bind, volume, file)') + .option('--hostPath ', 'hostPath') + .option('--volumeName ', 'volumeName') + .option('--content ', 'content') + .requiredOption('--mountPath ', 'mountPath') + .option('--serviceType ', 'serviceType (application, postgres, mysql, mariadb, mongo, redis, compose)') + .option('--filePath ', 'filePath') + .requiredOption('--serviceId ', 'serviceId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mounts.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mounts + .command('list-by-service-id') + .description('mounts listByServiceId') + .requiredOption('--serviceId ', 'serviceId') + .requiredOption('--serviceType ', 'serviceType (application, postgres, mysql, mariadb, mongo, redis, compose)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("mounts.listByServiceId", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mounts + .command('one') + .description('mounts one') + .requiredOption('--mountId ', 'mountId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("mounts.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mounts + .command('remove') + .description('mounts remove') + .requiredOption('--mountId ', 'mountId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mounts.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mounts + .command('update') + .description('mounts update') + .requiredOption('--mountId ', 'mountId') + .option('--type ', 'type (bind, volume, file)') + .option('--hostPath ', 'hostPath') + .option('--volumeName ', 'volumeName') + .option('--filePath ', 'filePath') + .option('--content ', 'content') + .option('--serviceType ', 'serviceType (application, postgres, mysql, mariadb, mongo, redis, compose)') + .option('--mountPath ', 'mountPath') + .option('--applicationId ', 'applicationId') + .option('--postgresId ', 'postgresId') + .option('--mariadbId ', 'mariadbId') + .option('--mongoId ', 'mongoId') + .option('--mysqlId ', 'mysqlId') + .option('--redisId ', 'redisId') + .option('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mounts.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_mysql = program.command('mysql').description('mysql commands'); + + g_mysql + .command('change-status') + .description('mysql changeStatus') + .requiredOption('--mysqlId ', 'mysqlId') + .requiredOption('--applicationStatus ', 'applicationStatus (idle, running, done, error)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mysql.changeStatus", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mysql + .command('create') + .description('mysql create') + .requiredOption('--name ', 'name') + .option('--appName ', 'appName') + .option('--dockerImage ', 'dockerImage') + .requiredOption('--environmentId ', 'environmentId') + .option('--description ', 'description') + .requiredOption('--databaseName ', 'databaseName') + .requiredOption('--databaseUser ', 'databaseUser') + .requiredOption('--databasePassword ', 'databasePassword') + .option('--databaseRootPassword ', 'databaseRootPassword') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mysql.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mysql + .command('deploy') + .description('mysql deploy') + .requiredOption('--mysqlId ', 'mysqlId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mysql.deploy", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mysql + .command('move') + .description('mysql move') + .requiredOption('--mysqlId ', 'mysqlId') + .requiredOption('--targetEnvironmentId ', 'targetEnvironmentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mysql.move", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mysql + .command('one') + .description('mysql one') + .requiredOption('--mysqlId ', 'mysqlId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("mysql.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mysql + .command('rebuild') + .description('mysql rebuild') + .requiredOption('--mysqlId ', 'mysqlId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mysql.rebuild", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mysql + .command('reload') + .description('mysql reload') + .requiredOption('--mysqlId ', 'mysqlId') + .requiredOption('--appName ', 'appName') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mysql.reload", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mysql + .command('remove') + .description('mysql remove') + .requiredOption('--mysqlId ', 'mysqlId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mysql.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mysql + .command('save-environment') + .description('mysql saveEnvironment') + .requiredOption('--mysqlId ', 'mysqlId') + .requiredOption('--env ', 'env') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mysql.saveEnvironment", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mysql + .command('save-external-port') + .description('mysql saveExternalPort') + .requiredOption('--mysqlId ', 'mysqlId') + .requiredOption('--externalPort ', 'externalPort') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["externalPort"] != null) opts["externalPort"] = Number(opts["externalPort"]); + const data = await apiPost("mysql.saveExternalPort", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mysql + .command('search') + .description('mysql search') + .option('--q ', 'q') + .option('--name ', 'name') + .option('--appName ', 'appName') + .option('--description ', 'description') + .option('--projectId ', 'projectId') + .option('--environmentId ', 'environmentId') + .option('--limit ', 'limit') + .option('--offset ', 'offset') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["limit"] != null) opts["limit"] = Number(opts["limit"]); + if (opts["offset"] != null) opts["offset"] = Number(opts["offset"]); + const data = await apiGet("mysql.search", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mysql + .command('start') + .description('mysql start') + .requiredOption('--mysqlId ', 'mysqlId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mysql.start", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mysql + .command('stop') + .description('mysql stop') + .requiredOption('--mysqlId ', 'mysqlId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("mysql.stop", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_mysql + .command('update') + .description('mysql update') + .requiredOption('--mysqlId ', 'mysqlId') + .option('--name ', 'name') + .option('--appName ', 'appName') + .option('--description ', 'description') + .option('--databaseName ', 'databaseName') + .option('--databaseUser ', 'databaseUser') + .option('--databasePassword ', 'databasePassword') + .option('--databaseRootPassword ', 'databaseRootPassword') + .option('--dockerImage ', 'dockerImage') + .option('--command ', 'command') + .option('--args ', 'args') + .option('--env ', 'env') + .option('--memoryReservation ', 'memoryReservation') + .option('--memoryLimit ', 'memoryLimit') + .option('--cpuReservation ', 'cpuReservation') + .option('--cpuLimit ', 'cpuLimit') + .option('--externalPort ', 'externalPort') + .option('--applicationStatus ', 'applicationStatus (idle, running, done, error)') + .option('--healthCheckSwarm ', 'healthCheckSwarm') + .option('--restartPolicySwarm ', 'restartPolicySwarm') + .option('--placementSwarm ', 'placementSwarm') + .option('--updateConfigSwarm ', 'updateConfigSwarm') + .option('--rollbackConfigSwarm ', 'rollbackConfigSwarm') + .option('--modeSwarm ', 'modeSwarm') + .option('--labelsSwarm ', 'labelsSwarm') + .option('--networkSwarm ', 'networkSwarm') + .option('--stopGracePeriodSwarm ', 'stopGracePeriodSwarm') + .option('--endpointSpecSwarm ', 'endpointSpecSwarm') + .option('--ulimitsSwarm ', 'ulimitsSwarm') + .option('--replicas ', 'replicas') + .option('--createdAt ', 'createdAt') + .option('--environmentId ', 'environmentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["externalPort"] != null) opts["externalPort"] = Number(opts["externalPort"]); + if (opts["replicas"] != null) opts["replicas"] = Number(opts["replicas"]); + const data = await apiPost("mysql.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_notification = program.command('notification').description('notification commands'); + + g_notification + .command('all') + .description('notification all') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("notification.all", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('create-custom') + .description('notification createCustom') + .option('--appBuildError', 'appBuildError') + .option('--databaseBackup', 'databaseBackup') + .option('--volumeBackup', 'volumeBackup') + .option('--dokployRestart', 'dokployRestart') + .requiredOption('--name ', 'name') + .option('--appDeploy', 'appDeploy') + .option('--dockerCleanup', 'dockerCleanup') + .option('--serverThreshold', 'serverThreshold') + .requiredOption('--endpoint ', 'endpoint') + .option('--headers ', 'headers') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + const data = await apiPost("notification.createCustom", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('create-discord') + .description('notification createDiscord') + .requiredOption('--appBuildError', 'appBuildError') + .requiredOption('--databaseBackup', 'databaseBackup') + .requiredOption('--volumeBackup', 'volumeBackup') + .requiredOption('--dokployRestart', 'dokployRestart') + .requiredOption('--name ', 'name') + .requiredOption('--appDeploy', 'appDeploy') + .requiredOption('--dockerCleanup', 'dockerCleanup') + .requiredOption('--serverThreshold', 'serverThreshold') + .requiredOption('--webhookUrl ', 'webhookUrl') + .requiredOption('--decoration', 'decoration') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + if (opts["decoration"] != null) opts["decoration"] = opts["decoration"] === true || opts["decoration"] === "true"; + const data = await apiPost("notification.createDiscord", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('create-email') + .description('notification createEmail') + .requiredOption('--appBuildError', 'appBuildError') + .requiredOption('--databaseBackup', 'databaseBackup') + .requiredOption('--volumeBackup', 'volumeBackup') + .requiredOption('--dokployRestart', 'dokployRestart') + .requiredOption('--name ', 'name') + .requiredOption('--appDeploy', 'appDeploy') + .requiredOption('--dockerCleanup', 'dockerCleanup') + .requiredOption('--serverThreshold', 'serverThreshold') + .requiredOption('--smtpServer ', 'smtpServer') + .requiredOption('--smtpPort ', 'smtpPort') + .requiredOption('--username ', 'username') + .requiredOption('--password ', 'password') + .requiredOption('--fromAddress ', 'fromAddress') + .requiredOption('--toAddresses ', 'toAddresses') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + if (opts["smtpPort"] != null) opts["smtpPort"] = Number(opts["smtpPort"]); + const data = await apiPost("notification.createEmail", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('create-gotify') + .description('notification createGotify') + .requiredOption('--appBuildError', 'appBuildError') + .requiredOption('--databaseBackup', 'databaseBackup') + .requiredOption('--volumeBackup', 'volumeBackup') + .requiredOption('--dokployRestart', 'dokployRestart') + .requiredOption('--name ', 'name') + .requiredOption('--appDeploy', 'appDeploy') + .requiredOption('--dockerCleanup', 'dockerCleanup') + .requiredOption('--serverUrl ', 'serverUrl') + .requiredOption('--appToken ', 'appToken') + .requiredOption('--priority ', 'priority') + .requiredOption('--decoration', 'decoration') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["priority"] != null) opts["priority"] = Number(opts["priority"]); + if (opts["decoration"] != null) opts["decoration"] = opts["decoration"] === true || opts["decoration"] === "true"; + const data = await apiPost("notification.createGotify", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('create-lark') + .description('notification createLark') + .requiredOption('--appBuildError', 'appBuildError') + .requiredOption('--databaseBackup', 'databaseBackup') + .requiredOption('--volumeBackup', 'volumeBackup') + .requiredOption('--dokployRestart', 'dokployRestart') + .requiredOption('--name ', 'name') + .requiredOption('--appDeploy', 'appDeploy') + .requiredOption('--dockerCleanup', 'dockerCleanup') + .requiredOption('--serverThreshold', 'serverThreshold') + .requiredOption('--webhookUrl ', 'webhookUrl') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + const data = await apiPost("notification.createLark", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('create-ntfy') + .description('notification createNtfy') + .requiredOption('--appBuildError', 'appBuildError') + .requiredOption('--databaseBackup', 'databaseBackup') + .requiredOption('--volumeBackup', 'volumeBackup') + .requiredOption('--dokployRestart', 'dokployRestart') + .requiredOption('--name ', 'name') + .requiredOption('--appDeploy', 'appDeploy') + .requiredOption('--dockerCleanup', 'dockerCleanup') + .requiredOption('--serverUrl ', 'serverUrl') + .requiredOption('--topic ', 'topic') + .requiredOption('--accessToken ', 'accessToken') + .requiredOption('--priority ', 'priority') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["priority"] != null) opts["priority"] = Number(opts["priority"]); + const data = await apiPost("notification.createNtfy", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('create-pushover') + .description('notification createPushover') + .option('--appBuildError', 'appBuildError') + .option('--databaseBackup', 'databaseBackup') + .option('--volumeBackup', 'volumeBackup') + .option('--dokployRestart', 'dokployRestart') + .requiredOption('--name ', 'name') + .option('--appDeploy', 'appDeploy') + .option('--dockerCleanup', 'dockerCleanup') + .option('--serverThreshold', 'serverThreshold') + .requiredOption('--userKey ', 'userKey') + .requiredOption('--apiToken ', 'apiToken') + .option('--priority ', 'priority') + .option('--retry ', 'retry') + .option('--expire ', 'expire') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + if (opts["priority"] != null) opts["priority"] = Number(opts["priority"]); + if (opts["retry"] != null) opts["retry"] = Number(opts["retry"]); + if (opts["expire"] != null) opts["expire"] = Number(opts["expire"]); + const data = await apiPost("notification.createPushover", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('create-resend') + .description('notification createResend') + .requiredOption('--appBuildError', 'appBuildError') + .requiredOption('--databaseBackup', 'databaseBackup') + .requiredOption('--volumeBackup', 'volumeBackup') + .requiredOption('--dokployRestart', 'dokployRestart') + .requiredOption('--name ', 'name') + .requiredOption('--appDeploy', 'appDeploy') + .requiredOption('--dockerCleanup', 'dockerCleanup') + .requiredOption('--serverThreshold', 'serverThreshold') + .requiredOption('--apiKey ', 'apiKey') + .requiredOption('--fromAddress ', 'fromAddress') + .requiredOption('--toAddresses ', 'toAddresses') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + const data = await apiPost("notification.createResend", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('create-slack') + .description('notification createSlack') + .requiredOption('--appBuildError', 'appBuildError') + .requiredOption('--databaseBackup', 'databaseBackup') + .requiredOption('--volumeBackup', 'volumeBackup') + .requiredOption('--dokployRestart', 'dokployRestart') + .requiredOption('--name ', 'name') + .requiredOption('--appDeploy', 'appDeploy') + .requiredOption('--dockerCleanup', 'dockerCleanup') + .requiredOption('--serverThreshold', 'serverThreshold') + .requiredOption('--webhookUrl ', 'webhookUrl') + .requiredOption('--channel ', 'channel') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + const data = await apiPost("notification.createSlack", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('create-teams') + .description('notification createTeams') + .requiredOption('--appBuildError', 'appBuildError') + .requiredOption('--databaseBackup', 'databaseBackup') + .requiredOption('--volumeBackup', 'volumeBackup') + .requiredOption('--dokployRestart', 'dokployRestart') + .requiredOption('--name ', 'name') + .requiredOption('--appDeploy', 'appDeploy') + .requiredOption('--dockerCleanup', 'dockerCleanup') + .requiredOption('--serverThreshold', 'serverThreshold') + .requiredOption('--webhookUrl ', 'webhookUrl') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + const data = await apiPost("notification.createTeams", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('create-telegram') + .description('notification createTelegram') + .requiredOption('--appBuildError', 'appBuildError') + .requiredOption('--databaseBackup', 'databaseBackup') + .requiredOption('--volumeBackup', 'volumeBackup') + .requiredOption('--dokployRestart', 'dokployRestart') + .requiredOption('--name ', 'name') + .requiredOption('--appDeploy', 'appDeploy') + .requiredOption('--dockerCleanup', 'dockerCleanup') + .requiredOption('--serverThreshold', 'serverThreshold') + .requiredOption('--botToken ', 'botToken') + .requiredOption('--chatId ', 'chatId') + .requiredOption('--messageThreadId ', 'messageThreadId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + const data = await apiPost("notification.createTelegram", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('get-email-providers') + .description('notification getEmailProviders') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("notification.getEmailProviders", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('one') + .description('notification one') + .requiredOption('--notificationId ', 'notificationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("notification.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('receive-notification') + .description('notification receiveNotification') + .option('--ServerType ', 'ServerType (Dokploy, Remote)') + .requiredOption('--Type ', 'Type (Memory, CPU)') + .requiredOption('--Value ', 'Value') + .requiredOption('--Threshold ', 'Threshold') + .requiredOption('--Message ', 'Message') + .requiredOption('--Timestamp ', 'Timestamp') + .requiredOption('--Token ', 'Token') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["Value"] != null) opts["Value"] = Number(opts["Value"]); + if (opts["Threshold"] != null) opts["Threshold"] = Number(opts["Threshold"]); + const data = await apiPost("notification.receiveNotification", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('remove') + .description('notification remove') + .requiredOption('--notificationId ', 'notificationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("notification.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('test-custom-connection') + .description('notification testCustomConnection') + .requiredOption('--endpoint ', 'endpoint') + .option('--headers ', 'headers') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("notification.testCustomConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('test-discord-connection') + .description('notification testDiscordConnection') + .requiredOption('--webhookUrl ', 'webhookUrl') + .option('--decoration', 'decoration') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["decoration"] != null) opts["decoration"] = opts["decoration"] === true || opts["decoration"] === "true"; + const data = await apiPost("notification.testDiscordConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('test-email-connection') + .description('notification testEmailConnection') + .requiredOption('--smtpServer ', 'smtpServer') + .requiredOption('--smtpPort ', 'smtpPort') + .requiredOption('--username ', 'username') + .requiredOption('--password ', 'password') + .requiredOption('--toAddresses ', 'toAddresses') + .requiredOption('--fromAddress ', 'fromAddress') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["smtpPort"] != null) opts["smtpPort"] = Number(opts["smtpPort"]); + const data = await apiPost("notification.testEmailConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('test-gotify-connection') + .description('notification testGotifyConnection') + .requiredOption('--serverUrl ', 'serverUrl') + .requiredOption('--appToken ', 'appToken') + .requiredOption('--priority ', 'priority') + .option('--decoration', 'decoration') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["priority"] != null) opts["priority"] = Number(opts["priority"]); + if (opts["decoration"] != null) opts["decoration"] = opts["decoration"] === true || opts["decoration"] === "true"; + const data = await apiPost("notification.testGotifyConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('test-lark-connection') + .description('notification testLarkConnection') + .requiredOption('--webhookUrl ', 'webhookUrl') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("notification.testLarkConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('test-ntfy-connection') + .description('notification testNtfyConnection') + .requiredOption('--serverUrl ', 'serverUrl') + .requiredOption('--topic ', 'topic') + .requiredOption('--accessToken ', 'accessToken') + .requiredOption('--priority ', 'priority') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["priority"] != null) opts["priority"] = Number(opts["priority"]); + const data = await apiPost("notification.testNtfyConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('test-pushover-connection') + .description('notification testPushoverConnection') + .requiredOption('--userKey ', 'userKey') + .requiredOption('--apiToken ', 'apiToken') + .requiredOption('--priority ', 'priority') + .option('--retry ', 'retry') + .option('--expire ', 'expire') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["priority"] != null) opts["priority"] = Number(opts["priority"]); + if (opts["retry"] != null) opts["retry"] = Number(opts["retry"]); + if (opts["expire"] != null) opts["expire"] = Number(opts["expire"]); + const data = await apiPost("notification.testPushoverConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('test-resend-connection') + .description('notification testResendConnection') + .requiredOption('--apiKey ', 'apiKey') + .requiredOption('--fromAddress ', 'fromAddress') + .requiredOption('--toAddresses ', 'toAddresses') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("notification.testResendConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('test-slack-connection') + .description('notification testSlackConnection') + .requiredOption('--webhookUrl ', 'webhookUrl') + .requiredOption('--channel ', 'channel') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("notification.testSlackConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('test-teams-connection') + .description('notification testTeamsConnection') + .requiredOption('--webhookUrl ', 'webhookUrl') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("notification.testTeamsConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('test-telegram-connection') + .description('notification testTelegramConnection') + .requiredOption('--botToken ', 'botToken') + .requiredOption('--chatId ', 'chatId') + .requiredOption('--messageThreadId ', 'messageThreadId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("notification.testTelegramConnection", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('update-custom') + .description('notification updateCustom') + .option('--appBuildError', 'appBuildError') + .option('--databaseBackup', 'databaseBackup') + .option('--volumeBackup', 'volumeBackup') + .option('--dokployRestart', 'dokployRestart') + .option('--name ', 'name') + .option('--appDeploy', 'appDeploy') + .option('--dockerCleanup', 'dockerCleanup') + .option('--serverThreshold', 'serverThreshold') + .option('--endpoint ', 'endpoint') + .option('--headers ', 'headers') + .requiredOption('--notificationId ', 'notificationId') + .requiredOption('--customId ', 'customId') + .option('--organizationId ', 'organizationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + const data = await apiPost("notification.updateCustom", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('update-discord') + .description('notification updateDiscord') + .option('--appBuildError', 'appBuildError') + .option('--databaseBackup', 'databaseBackup') + .option('--volumeBackup', 'volumeBackup') + .option('--dokployRestart', 'dokployRestart') + .option('--name ', 'name') + .option('--appDeploy', 'appDeploy') + .option('--dockerCleanup', 'dockerCleanup') + .option('--serverThreshold', 'serverThreshold') + .option('--webhookUrl ', 'webhookUrl') + .option('--decoration', 'decoration') + .requiredOption('--notificationId ', 'notificationId') + .requiredOption('--discordId ', 'discordId') + .option('--organizationId ', 'organizationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + if (opts["decoration"] != null) opts["decoration"] = opts["decoration"] === true || opts["decoration"] === "true"; + const data = await apiPost("notification.updateDiscord", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('update-email') + .description('notification updateEmail') + .option('--appBuildError', 'appBuildError') + .option('--databaseBackup', 'databaseBackup') + .option('--volumeBackup', 'volumeBackup') + .option('--dokployRestart', 'dokployRestart') + .option('--name ', 'name') + .option('--appDeploy', 'appDeploy') + .option('--dockerCleanup', 'dockerCleanup') + .option('--serverThreshold', 'serverThreshold') + .option('--smtpServer ', 'smtpServer') + .option('--smtpPort ', 'smtpPort') + .option('--username ', 'username') + .option('--password ', 'password') + .option('--fromAddress ', 'fromAddress') + .option('--toAddresses ', 'toAddresses') + .requiredOption('--notificationId ', 'notificationId') + .requiredOption('--emailId ', 'emailId') + .option('--organizationId ', 'organizationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + if (opts["smtpPort"] != null) opts["smtpPort"] = Number(opts["smtpPort"]); + const data = await apiPost("notification.updateEmail", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('update-gotify') + .description('notification updateGotify') + .option('--appBuildError', 'appBuildError') + .option('--databaseBackup', 'databaseBackup') + .option('--volumeBackup', 'volumeBackup') + .option('--dokployRestart', 'dokployRestart') + .option('--name ', 'name') + .option('--appDeploy', 'appDeploy') + .option('--dockerCleanup', 'dockerCleanup') + .option('--serverUrl ', 'serverUrl') + .option('--appToken ', 'appToken') + .option('--priority ', 'priority') + .option('--decoration', 'decoration') + .requiredOption('--notificationId ', 'notificationId') + .requiredOption('--gotifyId ', 'gotifyId') + .option('--organizationId ', 'organizationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["priority"] != null) opts["priority"] = Number(opts["priority"]); + if (opts["decoration"] != null) opts["decoration"] = opts["decoration"] === true || opts["decoration"] === "true"; + const data = await apiPost("notification.updateGotify", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('update-lark') + .description('notification updateLark') + .option('--appBuildError', 'appBuildError') + .option('--databaseBackup', 'databaseBackup') + .option('--volumeBackup', 'volumeBackup') + .option('--dokployRestart', 'dokployRestart') + .option('--name ', 'name') + .option('--appDeploy', 'appDeploy') + .option('--dockerCleanup', 'dockerCleanup') + .option('--serverThreshold', 'serverThreshold') + .option('--webhookUrl ', 'webhookUrl') + .requiredOption('--notificationId ', 'notificationId') + .requiredOption('--larkId ', 'larkId') + .option('--organizationId ', 'organizationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + const data = await apiPost("notification.updateLark", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('update-ntfy') + .description('notification updateNtfy') + .option('--appBuildError', 'appBuildError') + .option('--databaseBackup', 'databaseBackup') + .option('--volumeBackup', 'volumeBackup') + .option('--dokployRestart', 'dokployRestart') + .option('--name ', 'name') + .option('--appDeploy', 'appDeploy') + .option('--dockerCleanup', 'dockerCleanup') + .option('--serverUrl ', 'serverUrl') + .option('--topic ', 'topic') + .option('--accessToken ', 'accessToken') + .option('--priority ', 'priority') + .requiredOption('--notificationId ', 'notificationId') + .requiredOption('--ntfyId ', 'ntfyId') + .option('--organizationId ', 'organizationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["priority"] != null) opts["priority"] = Number(opts["priority"]); + const data = await apiPost("notification.updateNtfy", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('update-pushover') + .description('notification updatePushover') + .requiredOption('--notificationId ', 'notificationId') + .requiredOption('--pushoverId ', 'pushoverId') + .option('--organizationId ', 'organizationId') + .option('--userKey ', 'userKey') + .option('--apiToken ', 'apiToken') + .option('--priority ', 'priority') + .option('--retry ', 'retry') + .option('--expire ', 'expire') + .option('--appBuildError', 'appBuildError') + .option('--databaseBackup', 'databaseBackup') + .option('--volumeBackup', 'volumeBackup') + .option('--dokployRestart', 'dokployRestart') + .option('--name ', 'name') + .option('--appDeploy', 'appDeploy') + .option('--dockerCleanup', 'dockerCleanup') + .option('--serverThreshold', 'serverThreshold') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["priority"] != null) opts["priority"] = Number(opts["priority"]); + if (opts["retry"] != null) opts["retry"] = Number(opts["retry"]); + if (opts["expire"] != null) opts["expire"] = Number(opts["expire"]); + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + const data = await apiPost("notification.updatePushover", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('update-resend') + .description('notification updateResend') + .option('--appBuildError', 'appBuildError') + .option('--databaseBackup', 'databaseBackup') + .option('--volumeBackup', 'volumeBackup') + .option('--dokployRestart', 'dokployRestart') + .option('--name ', 'name') + .option('--appDeploy', 'appDeploy') + .option('--dockerCleanup', 'dockerCleanup') + .option('--serverThreshold', 'serverThreshold') + .option('--apiKey ', 'apiKey') + .option('--fromAddress ', 'fromAddress') + .option('--toAddresses ', 'toAddresses') + .requiredOption('--notificationId ', 'notificationId') + .requiredOption('--resendId ', 'resendId') + .option('--organizationId ', 'organizationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + const data = await apiPost("notification.updateResend", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('update-slack') + .description('notification updateSlack') + .option('--appBuildError', 'appBuildError') + .option('--databaseBackup', 'databaseBackup') + .option('--volumeBackup', 'volumeBackup') + .option('--dokployRestart', 'dokployRestart') + .option('--name ', 'name') + .option('--appDeploy', 'appDeploy') + .option('--dockerCleanup', 'dockerCleanup') + .option('--serverThreshold', 'serverThreshold') + .option('--webhookUrl ', 'webhookUrl') + .option('--channel ', 'channel') + .requiredOption('--notificationId ', 'notificationId') + .requiredOption('--slackId ', 'slackId') + .option('--organizationId ', 'organizationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + const data = await apiPost("notification.updateSlack", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('update-teams') + .description('notification updateTeams') + .option('--appBuildError', 'appBuildError') + .option('--databaseBackup', 'databaseBackup') + .option('--volumeBackup', 'volumeBackup') + .option('--dokployRestart', 'dokployRestart') + .option('--name ', 'name') + .option('--appDeploy', 'appDeploy') + .option('--dockerCleanup', 'dockerCleanup') + .option('--serverThreshold', 'serverThreshold') + .option('--webhookUrl ', 'webhookUrl') + .requiredOption('--notificationId ', 'notificationId') + .requiredOption('--teamsId ', 'teamsId') + .option('--organizationId ', 'organizationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + const data = await apiPost("notification.updateTeams", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_notification + .command('update-telegram') + .description('notification updateTelegram') + .option('--appBuildError', 'appBuildError') + .option('--databaseBackup', 'databaseBackup') + .option('--volumeBackup', 'volumeBackup') + .option('--dokployRestart', 'dokployRestart') + .option('--name ', 'name') + .option('--appDeploy', 'appDeploy') + .option('--dockerCleanup', 'dockerCleanup') + .option('--serverThreshold', 'serverThreshold') + .option('--botToken ', 'botToken') + .option('--chatId ', 'chatId') + .option('--messageThreadId ', 'messageThreadId') + .requiredOption('--notificationId ', 'notificationId') + .requiredOption('--telegramId ', 'telegramId') + .option('--organizationId ', 'organizationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["appBuildError"] != null) opts["appBuildError"] = opts["appBuildError"] === true || opts["appBuildError"] === "true"; + if (opts["databaseBackup"] != null) opts["databaseBackup"] = opts["databaseBackup"] === true || opts["databaseBackup"] === "true"; + if (opts["volumeBackup"] != null) opts["volumeBackup"] = opts["volumeBackup"] === true || opts["volumeBackup"] === "true"; + if (opts["dokployRestart"] != null) opts["dokployRestart"] = opts["dokployRestart"] === true || opts["dokployRestart"] === "true"; + if (opts["appDeploy"] != null) opts["appDeploy"] = opts["appDeploy"] === true || opts["appDeploy"] === "true"; + if (opts["dockerCleanup"] != null) opts["dockerCleanup"] = opts["dockerCleanup"] === true || opts["dockerCleanup"] === "true"; + if (opts["serverThreshold"] != null) opts["serverThreshold"] = opts["serverThreshold"] === true || opts["serverThreshold"] === "true"; + const data = await apiPost("notification.updateTelegram", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_organization = program.command('organization').description('organization commands'); + + g_organization + .command('active') + .description('organization active') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("organization.active", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_organization + .command('all') + .description('organization all') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("organization.all", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_organization + .command('all-invitations') + .description('organization allInvitations') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("organization.allInvitations", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_organization + .command('create') + .description('organization create') + .requiredOption('--name ', 'name') + .option('--logo ', 'logo') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("organization.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_organization + .command('delete') + .description('organization delete') + .requiredOption('--organizationId ', 'organizationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("organization.delete", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_organization + .command('one') + .description('organization one') + .requiredOption('--organizationId ', 'organizationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("organization.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_organization + .command('remove-invitation') + .description('organization removeInvitation') + .requiredOption('--invitationId ', 'invitationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("organization.removeInvitation", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_organization + .command('set-default') + .description('organization setDefault') + .requiredOption('--organizationId ', 'organizationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("organization.setDefault", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_organization + .command('update') + .description('organization update') + .requiredOption('--organizationId ', 'organizationId') + .requiredOption('--name ', 'name') + .option('--logo ', 'logo') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("organization.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_organization + .command('update-member-role') + .description('organization updateMemberRole') + .requiredOption('--memberId ', 'memberId') + .requiredOption('--role ', 'role (admin, member)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("organization.updateMemberRole", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_patch = program.command('patch').description('patch commands'); + + g_patch + .command('by-entity-id') + .description('patch byEntityId') + .requiredOption('--id ', 'id') + .requiredOption('--type ', 'type (application, compose)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("patch.byEntityId", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_patch + .command('clean-patch-repos') + .description('patch cleanPatchRepos') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("patch.cleanPatchRepos", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_patch + .command('create') + .description('patch create') + .requiredOption('--filePath ', 'filePath') + .requiredOption('--content ', 'content') + .option('--type ', 'type (create, update, delete)') + .option('--enabled', 'enabled') + .option('--applicationId ', 'applicationId') + .option('--composeId ', 'composeId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["enabled"] != null) opts["enabled"] = opts["enabled"] === true || opts["enabled"] === "true"; + const data = await apiPost("patch.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_patch + .command('delete') + .description('patch delete') + .requiredOption('--patchId ', 'patchId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("patch.delete", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_patch + .command('ensure-repo') + .description('patch ensureRepo') + .requiredOption('--id ', 'id') + .requiredOption('--type ', 'type (application, compose)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("patch.ensureRepo", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_patch + .command('mark-file-for-deletion') + .description('patch markFileForDeletion') + .requiredOption('--id ', 'id') + .requiredOption('--type ', 'type (application, compose)') + .requiredOption('--filePath ', 'filePath') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("patch.markFileForDeletion", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_patch + .command('one') + .description('patch one') + .requiredOption('--patchId ', 'patchId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("patch.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_patch + .command('read-repo-directories') + .description('patch readRepoDirectories') + .requiredOption('--id ', 'id') + .requiredOption('--type ', 'type (application, compose)') + .requiredOption('--repoPath ', 'repoPath') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("patch.readRepoDirectories", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_patch + .command('read-repo-file') + .description('patch readRepoFile') + .requiredOption('--id ', 'id') + .requiredOption('--type ', 'type (application, compose)') + .requiredOption('--filePath ', 'filePath') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("patch.readRepoFile", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_patch + .command('save-file-as-patch') + .description('patch saveFileAsPatch') + .requiredOption('--id ', 'id') + .requiredOption('--type ', 'type (application, compose)') + .requiredOption('--filePath ', 'filePath') + .requiredOption('--content ', 'content') + .option('--patchType ', 'patchType (create, update)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("patch.saveFileAsPatch", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_patch + .command('toggle-enabled') + .description('patch toggleEnabled') + .requiredOption('--patchId ', 'patchId') + .requiredOption('--enabled', 'enabled') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["enabled"] != null) opts["enabled"] = opts["enabled"] === true || opts["enabled"] === "true"; + const data = await apiPost("patch.toggleEnabled", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_patch + .command('update') + .description('patch update') + .requiredOption('--patchId ', 'patchId') + .option('--type ', 'type (create, update, delete)') + .option('--filePath ', 'filePath') + .option('--enabled', 'enabled') + .option('--content ', 'content') + .option('--createdAt ', 'createdAt') + .option('--updatedAt ', 'updatedAt') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["enabled"] != null) opts["enabled"] = opts["enabled"] === true || opts["enabled"] === "true"; + const data = await apiPost("patch.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_port = program.command('port').description('port commands'); + + g_port + .command('create') + .description('port create') + .requiredOption('--publishedPort ', 'publishedPort') + .requiredOption('--publishMode ', 'publishMode (ingress, host)') + .requiredOption('--targetPort ', 'targetPort') + .requiredOption('--protocol ', 'protocol (tcp, udp)') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["publishedPort"] != null) opts["publishedPort"] = Number(opts["publishedPort"]); + if (opts["targetPort"] != null) opts["targetPort"] = Number(opts["targetPort"]); + const data = await apiPost("port.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_port + .command('delete') + .description('port delete') + .requiredOption('--portId ', 'portId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("port.delete", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_port + .command('one') + .description('port one') + .requiredOption('--portId ', 'portId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("port.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_port + .command('update') + .description('port update') + .requiredOption('--portId ', 'portId') + .requiredOption('--publishedPort ', 'publishedPort') + .requiredOption('--publishMode ', 'publishMode (ingress, host)') + .requiredOption('--targetPort ', 'targetPort') + .requiredOption('--protocol ', 'protocol (tcp, udp)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["publishedPort"] != null) opts["publishedPort"] = Number(opts["publishedPort"]); + if (opts["targetPort"] != null) opts["targetPort"] = Number(opts["targetPort"]); + const data = await apiPost("port.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_postgres = program.command('postgres').description('postgres commands'); + + g_postgres + .command('change-status') + .description('postgres changeStatus') + .requiredOption('--postgresId ', 'postgresId') + .requiredOption('--applicationStatus ', 'applicationStatus (idle, running, done, error)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("postgres.changeStatus", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_postgres + .command('create') + .description('postgres create') + .requiredOption('--name ', 'name') + .option('--appName ', 'appName') + .requiredOption('--databaseName ', 'databaseName') + .requiredOption('--databaseUser ', 'databaseUser') + .requiredOption('--databasePassword ', 'databasePassword') + .option('--dockerImage ', 'dockerImage') + .requiredOption('--environmentId ', 'environmentId') + .option('--description ', 'description') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("postgres.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_postgres + .command('deploy') + .description('postgres deploy') + .requiredOption('--postgresId ', 'postgresId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("postgres.deploy", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_postgres + .command('move') + .description('postgres move') + .requiredOption('--postgresId ', 'postgresId') + .requiredOption('--targetEnvironmentId ', 'targetEnvironmentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("postgres.move", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_postgres + .command('one') + .description('postgres one') + .requiredOption('--postgresId ', 'postgresId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("postgres.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_postgres + .command('rebuild') + .description('postgres rebuild') + .requiredOption('--postgresId ', 'postgresId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("postgres.rebuild", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_postgres + .command('reload') + .description('postgres reload') + .requiredOption('--postgresId ', 'postgresId') + .requiredOption('--appName ', 'appName') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("postgres.reload", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_postgres + .command('remove') + .description('postgres remove') + .requiredOption('--postgresId ', 'postgresId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("postgres.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_postgres + .command('save-environment') + .description('postgres saveEnvironment') + .requiredOption('--postgresId ', 'postgresId') + .requiredOption('--env ', 'env') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("postgres.saveEnvironment", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_postgres + .command('save-external-port') + .description('postgres saveExternalPort') + .requiredOption('--postgresId ', 'postgresId') + .requiredOption('--externalPort ', 'externalPort') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["externalPort"] != null) opts["externalPort"] = Number(opts["externalPort"]); + const data = await apiPost("postgres.saveExternalPort", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_postgres + .command('search') + .description('postgres search') + .option('--q ', 'q') + .option('--name ', 'name') + .option('--appName ', 'appName') + .option('--description ', 'description') + .option('--projectId ', 'projectId') + .option('--environmentId ', 'environmentId') + .option('--limit ', 'limit') + .option('--offset ', 'offset') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["limit"] != null) opts["limit"] = Number(opts["limit"]); + if (opts["offset"] != null) opts["offset"] = Number(opts["offset"]); + const data = await apiGet("postgres.search", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_postgres + .command('start') + .description('postgres start') + .requiredOption('--postgresId ', 'postgresId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("postgres.start", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_postgres + .command('stop') + .description('postgres stop') + .requiredOption('--postgresId ', 'postgresId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("postgres.stop", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_postgres + .command('update') + .description('postgres update') + .requiredOption('--postgresId ', 'postgresId') + .option('--name ', 'name') + .option('--appName ', 'appName') + .option('--databaseName ', 'databaseName') + .option('--databaseUser ', 'databaseUser') + .option('--databasePassword ', 'databasePassword') + .option('--description ', 'description') + .option('--dockerImage ', 'dockerImage') + .option('--command ', 'command') + .option('--args ', 'args') + .option('--env ', 'env') + .option('--memoryReservation ', 'memoryReservation') + .option('--externalPort ', 'externalPort') + .option('--memoryLimit ', 'memoryLimit') + .option('--cpuReservation ', 'cpuReservation') + .option('--cpuLimit ', 'cpuLimit') + .option('--applicationStatus ', 'applicationStatus (idle, running, done, error)') + .option('--healthCheckSwarm ', 'healthCheckSwarm') + .option('--restartPolicySwarm ', 'restartPolicySwarm') + .option('--placementSwarm ', 'placementSwarm') + .option('--updateConfigSwarm ', 'updateConfigSwarm') + .option('--rollbackConfigSwarm ', 'rollbackConfigSwarm') + .option('--modeSwarm ', 'modeSwarm') + .option('--labelsSwarm ', 'labelsSwarm') + .option('--networkSwarm ', 'networkSwarm') + .option('--stopGracePeriodSwarm ', 'stopGracePeriodSwarm') + .option('--endpointSpecSwarm ', 'endpointSpecSwarm') + .option('--ulimitsSwarm ', 'ulimitsSwarm') + .option('--replicas ', 'replicas') + .option('--createdAt ', 'createdAt') + .option('--environmentId ', 'environmentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["externalPort"] != null) opts["externalPort"] = Number(opts["externalPort"]); + if (opts["replicas"] != null) opts["replicas"] = Number(opts["replicas"]); + const data = await apiPost("postgres.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_previewDeployment = program.command('preview-deployment').description('preview-deployment commands'); + + g_previewDeployment + .command('all') + .description('previewDeployment all') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("previewDeployment.all", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_previewDeployment + .command('delete') + .description('previewDeployment delete') + .requiredOption('--previewDeploymentId ', 'previewDeploymentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("previewDeployment.delete", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_previewDeployment + .command('one') + .description('previewDeployment one') + .requiredOption('--previewDeploymentId ', 'previewDeploymentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("previewDeployment.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_previewDeployment + .command('redeploy') + .description('previewDeployment redeploy') + .requiredOption('--previewDeploymentId ', 'previewDeploymentId') + .option('--title ', 'title') + .option('--description ', 'description') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("previewDeployment.redeploy", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_project = program.command('project').description('project commands'); + + g_project + .command('all') + .description('project all') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("project.all", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_project + .command('all-for-permissions') + .description('project allForPermissions') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("project.allForPermissions", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_project + .command('create') + .description('project create') + .requiredOption('--name ', 'name') + .option('--description ', 'description') + .option('--env ', 'env') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("project.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_project + .command('duplicate') + .description('project duplicate') + .requiredOption('--sourceEnvironmentId ', 'sourceEnvironmentId') + .requiredOption('--name ', 'name') + .option('--description ', 'description') + .option('--includeServices', 'includeServices') + .option('--selectedServices ', 'selectedServices') + .option('--duplicateInSameProject', 'duplicateInSameProject') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["includeServices"] != null) opts["includeServices"] = opts["includeServices"] === true || opts["includeServices"] === "true"; + if (opts["duplicateInSameProject"] != null) opts["duplicateInSameProject"] = opts["duplicateInSameProject"] === true || opts["duplicateInSameProject"] === "true"; + const data = await apiPost("project.duplicate", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_project + .command('one') + .description('project one') + .requiredOption('--projectId ', 'projectId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("project.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_project + .command('remove') + .description('project remove') + .requiredOption('--projectId ', 'projectId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("project.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_project + .command('search') + .description('project search') + .option('--q ', 'q') + .option('--name ', 'name') + .option('--description ', 'description') + .option('--limit ', 'limit') + .option('--offset ', 'offset') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["limit"] != null) opts["limit"] = Number(opts["limit"]); + if (opts["offset"] != null) opts["offset"] = Number(opts["offset"]); + const data = await apiGet("project.search", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_project + .command('update') + .description('project update') + .requiredOption('--projectId ', 'projectId') + .option('--name ', 'name') + .option('--description ', 'description') + .option('--createdAt ', 'createdAt') + .option('--organizationId ', 'organizationId') + .option('--env ', 'env') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("project.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_redirects = program.command('redirects').description('redirects commands'); + + g_redirects + .command('create') + .description('redirects create') + .requiredOption('--regex ', 'regex') + .requiredOption('--replacement ', 'replacement') + .requiredOption('--permanent', 'permanent') + .requiredOption('--applicationId ', 'applicationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["permanent"] != null) opts["permanent"] = opts["permanent"] === true || opts["permanent"] === "true"; + const data = await apiPost("redirects.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redirects + .command('delete') + .description('redirects delete') + .requiredOption('--redirectId ', 'redirectId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("redirects.delete", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redirects + .command('one') + .description('redirects one') + .requiredOption('--redirectId ', 'redirectId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("redirects.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redirects + .command('update') + .description('redirects update') + .requiredOption('--redirectId ', 'redirectId') + .requiredOption('--regex ', 'regex') + .requiredOption('--replacement ', 'replacement') + .requiredOption('--permanent', 'permanent') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["permanent"] != null) opts["permanent"] = opts["permanent"] === true || opts["permanent"] === "true"; + const data = await apiPost("redirects.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_redis = program.command('redis').description('redis commands'); + + g_redis + .command('change-status') + .description('redis changeStatus') + .requiredOption('--redisId ', 'redisId') + .requiredOption('--applicationStatus ', 'applicationStatus (idle, running, done, error)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("redis.changeStatus", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redis + .command('create') + .description('redis create') + .requiredOption('--name ', 'name') + .option('--appName ', 'appName') + .requiredOption('--databasePassword ', 'databasePassword') + .option('--dockerImage ', 'dockerImage') + .requiredOption('--environmentId ', 'environmentId') + .option('--description ', 'description') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("redis.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redis + .command('deploy') + .description('redis deploy') + .requiredOption('--redisId ', 'redisId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("redis.deploy", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redis + .command('move') + .description('redis move') + .requiredOption('--redisId ', 'redisId') + .requiredOption('--targetEnvironmentId ', 'targetEnvironmentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("redis.move", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redis + .command('one') + .description('redis one') + .requiredOption('--redisId ', 'redisId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("redis.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redis + .command('rebuild') + .description('redis rebuild') + .requiredOption('--redisId ', 'redisId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("redis.rebuild", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redis + .command('reload') + .description('redis reload') + .requiredOption('--redisId ', 'redisId') + .requiredOption('--appName ', 'appName') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("redis.reload", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redis + .command('remove') + .description('redis remove') + .requiredOption('--redisId ', 'redisId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("redis.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redis + .command('save-environment') + .description('redis saveEnvironment') + .requiredOption('--redisId ', 'redisId') + .requiredOption('--env ', 'env') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("redis.saveEnvironment", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redis + .command('save-external-port') + .description('redis saveExternalPort') + .requiredOption('--redisId ', 'redisId') + .requiredOption('--externalPort ', 'externalPort') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["externalPort"] != null) opts["externalPort"] = Number(opts["externalPort"]); + const data = await apiPost("redis.saveExternalPort", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redis + .command('search') + .description('redis search') + .option('--q ', 'q') + .option('--name ', 'name') + .option('--appName ', 'appName') + .option('--description ', 'description') + .option('--projectId ', 'projectId') + .option('--environmentId ', 'environmentId') + .option('--limit ', 'limit') + .option('--offset ', 'offset') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["limit"] != null) opts["limit"] = Number(opts["limit"]); + if (opts["offset"] != null) opts["offset"] = Number(opts["offset"]); + const data = await apiGet("redis.search", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redis + .command('start') + .description('redis start') + .requiredOption('--redisId ', 'redisId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("redis.start", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redis + .command('stop') + .description('redis stop') + .requiredOption('--redisId ', 'redisId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("redis.stop", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_redis + .command('update') + .description('redis update') + .requiredOption('--redisId ', 'redisId') + .option('--name ', 'name') + .option('--appName ', 'appName') + .option('--description ', 'description') + .option('--databasePassword ', 'databasePassword') + .option('--dockerImage ', 'dockerImage') + .option('--command ', 'command') + .option('--args ', 'args') + .option('--env ', 'env') + .option('--memoryReservation ', 'memoryReservation') + .option('--memoryLimit ', 'memoryLimit') + .option('--cpuReservation ', 'cpuReservation') + .option('--cpuLimit ', 'cpuLimit') + .option('--externalPort ', 'externalPort') + .option('--createdAt ', 'createdAt') + .option('--applicationStatus ', 'applicationStatus (idle, running, done, error)') + .option('--healthCheckSwarm ', 'healthCheckSwarm') + .option('--restartPolicySwarm ', 'restartPolicySwarm') + .option('--placementSwarm ', 'placementSwarm') + .option('--updateConfigSwarm ', 'updateConfigSwarm') + .option('--rollbackConfigSwarm ', 'rollbackConfigSwarm') + .option('--modeSwarm ', 'modeSwarm') + .option('--labelsSwarm ', 'labelsSwarm') + .option('--networkSwarm ', 'networkSwarm') + .option('--stopGracePeriodSwarm ', 'stopGracePeriodSwarm') + .option('--endpointSpecSwarm ', 'endpointSpecSwarm') + .option('--ulimitsSwarm ', 'ulimitsSwarm') + .option('--replicas ', 'replicas') + .option('--environmentId ', 'environmentId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["externalPort"] != null) opts["externalPort"] = Number(opts["externalPort"]); + if (opts["replicas"] != null) opts["replicas"] = Number(opts["replicas"]); + const data = await apiPost("redis.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_registry = program.command('registry').description('registry commands'); + + g_registry + .command('all') + .description('registry all') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("registry.all", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_registry + .command('create') + .description('registry create') + .requiredOption('--registryName ', 'registryName') + .requiredOption('--username ', 'username') + .requiredOption('--password ', 'password') + .requiredOption('--registryUrl ', 'registryUrl') + .requiredOption('--registryType ', 'registryType (cloud)') + .requiredOption('--imagePrefix ', 'imagePrefix') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("registry.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_registry + .command('one') + .description('registry one') + .requiredOption('--registryId ', 'registryId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("registry.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_registry + .command('remove') + .description('registry remove') + .requiredOption('--registryId ', 'registryId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("registry.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_registry + .command('test-registry') + .description('registry testRegistry') + .option('--registryName ', 'registryName') + .requiredOption('--username ', 'username') + .requiredOption('--password ', 'password') + .requiredOption('--registryUrl ', 'registryUrl') + .requiredOption('--registryType ', 'registryType (cloud)') + .option('--imagePrefix ', 'imagePrefix') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("registry.testRegistry", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_registry + .command('test-registry-by-id') + .description('registry testRegistryById') + .option('--registryId ', 'registryId') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("registry.testRegistryById", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_registry + .command('update') + .description('registry update') + .requiredOption('--registryId ', 'registryId') + .option('--registryName ', 'registryName') + .option('--imagePrefix ', 'imagePrefix') + .option('--username ', 'username') + .option('--password ', 'password') + .option('--registryUrl ', 'registryUrl') + .option('--createdAt ', 'createdAt') + .option('--registryType ', 'registryType (cloud)') + .option('--organizationId ', 'organizationId') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("registry.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_rollback = program.command('rollback').description('rollback commands'); + + g_rollback + .command('delete') + .description('rollback delete') + .requiredOption('--rollbackId ', 'rollbackId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("rollback.delete", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_rollback + .command('rollback') + .description('rollback rollback') + .requiredOption('--rollbackId ', 'rollbackId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("rollback.rollback", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_schedule = program.command('schedule').description('schedule commands'); + + g_schedule + .command('create') + .description('schedule create') + .option('--scheduleId ', 'scheduleId') + .requiredOption('--name ', 'name') + .requiredOption('--cronExpression ', 'cronExpression') + .option('--appName ', 'appName') + .option('--serviceName ', 'serviceName') + .option('--shellType ', 'shellType (bash, sh)') + .option('--scheduleType ', 'scheduleType (application, compose, server, dokploy-server)') + .requiredOption('--command ', 'command') + .option('--script ', 'script') + .option('--applicationId ', 'applicationId') + .option('--composeId ', 'composeId') + .option('--serverId ', 'serverId') + .option('--userId ', 'userId') + .option('--enabled', 'enabled') + .option('--timezone ', 'timezone') + .option('--createdAt ', 'createdAt') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["enabled"] != null) opts["enabled"] = opts["enabled"] === true || opts["enabled"] === "true"; + const data = await apiPost("schedule.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_schedule + .command('delete') + .description('schedule delete') + .requiredOption('--scheduleId ', 'scheduleId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("schedule.delete", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_schedule + .command('list') + .description('schedule list') + .requiredOption('--id ', 'id') + .requiredOption('--scheduleType ', 'scheduleType (application, compose, server, dokploy-server)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("schedule.list", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_schedule + .command('one') + .description('schedule one') + .requiredOption('--scheduleId ', 'scheduleId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("schedule.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_schedule + .command('run-manually') + .description('schedule runManually') + .requiredOption('--scheduleId ', 'scheduleId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("schedule.runManually", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_schedule + .command('update') + .description('schedule update') + .requiredOption('--scheduleId ', 'scheduleId') + .requiredOption('--name ', 'name') + .requiredOption('--cronExpression ', 'cronExpression') + .option('--appName ', 'appName') + .option('--serviceName ', 'serviceName') + .option('--shellType ', 'shellType (bash, sh)') + .option('--scheduleType ', 'scheduleType (application, compose, server, dokploy-server)') + .requiredOption('--command ', 'command') + .option('--script ', 'script') + .option('--applicationId ', 'applicationId') + .option('--composeId ', 'composeId') + .option('--serverId ', 'serverId') + .option('--userId ', 'userId') + .option('--enabled', 'enabled') + .option('--timezone ', 'timezone') + .option('--createdAt ', 'createdAt') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["enabled"] != null) opts["enabled"] = opts["enabled"] === true || opts["enabled"] === "true"; + const data = await apiPost("schedule.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_security = program.command('security').description('security commands'); + + g_security + .command('create') + .description('security create') + .requiredOption('--applicationId ', 'applicationId') + .requiredOption('--username ', 'username') + .requiredOption('--password ', 'password') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("security.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_security + .command('delete') + .description('security delete') + .requiredOption('--securityId ', 'securityId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("security.delete", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_security + .command('one') + .description('security one') + .requiredOption('--securityId ', 'securityId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("security.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_security + .command('update') + .description('security update') + .requiredOption('--securityId ', 'securityId') + .requiredOption('--username ', 'username') + .requiredOption('--password ', 'password') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("security.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_server = program.command('server').description('server commands'); + + g_server + .command('all') + .description('server all') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("server.all", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_server + .command('build-servers') + .description('server buildServers') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("server.buildServers", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_server + .command('count') + .description('server count') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("server.count", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_server + .command('create') + .description('server create') + .requiredOption('--name ', 'name') + .requiredOption('--description ', 'description') + .requiredOption('--ipAddress ', 'ipAddress') + .requiredOption('--port ', 'port') + .requiredOption('--username ', 'username') + .requiredOption('--sshKeyId ', 'sshKeyId') + .requiredOption('--serverType ', 'serverType (deploy, build)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["port"] != null) opts["port"] = Number(opts["port"]); + const data = await apiPost("server.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_server + .command('get-default-command') + .description('server getDefaultCommand') + .requiredOption('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("server.getDefaultCommand", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_server + .command('get-server-metrics') + .description('server getServerMetrics') + .requiredOption('--url ', 'url') + .requiredOption('--token ', 'token') + .requiredOption('--dataPoints ', 'dataPoints') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("server.getServerMetrics", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_server + .command('get-server-time') + .description('server getServerTime') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("server.getServerTime", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_server + .command('one') + .description('server one') + .requiredOption('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("server.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_server + .command('public-ip') + .description('server publicIp') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("server.publicIp", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_server + .command('remove') + .description('server remove') + .requiredOption('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("server.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_server + .command('security') + .description('server security') + .requiredOption('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("server.security", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_server + .command('setup') + .description('server setup') + .requiredOption('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("server.setup", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_server + .command('setup-monitoring') + .description('server setupMonitoring') + .requiredOption('--serverId ', 'serverId') + .requiredOption('--metricsConfig ', 'metricsConfig') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("server.setupMonitoring", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_server + .command('update') + .description('server update') + .requiredOption('--name ', 'name') + .requiredOption('--description ', 'description') + .requiredOption('--serverId ', 'serverId') + .requiredOption('--ipAddress ', 'ipAddress') + .requiredOption('--port ', 'port') + .requiredOption('--username ', 'username') + .requiredOption('--sshKeyId ', 'sshKeyId') + .requiredOption('--serverType ', 'serverType (deploy, build)') + .option('--command ', 'command') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["port"] != null) opts["port"] = Number(opts["port"]); + const data = await apiPost("server.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_server + .command('validate') + .description('server validate') + .requiredOption('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("server.validate", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_server + .command('with-sshkey') + .description('server withSSHKey') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("server.withSSHKey", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_settings = program.command('settings').description('settings commands'); + + g_settings + .command('assign-domain-server') + .description('settings assignDomainServer') + .requiredOption('--host ', 'host') + .requiredOption('--certificateType ', 'certificateType (letsencrypt, none, custom)') + .option('--letsEncryptEmail ', 'letsEncryptEmail') + .option('--https', 'https') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["https"] != null) opts["https"] = opts["https"] === true || opts["https"] === "true"; + const data = await apiPost("settings.assignDomainServer", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('check-gpustatus') + .description('settings checkGPUStatus') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.checkGPUStatus", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('clean-all') + .description('settings cleanAll') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.cleanAll", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('clean-all-deployment-queue') + .description('settings cleanAllDeploymentQueue') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.cleanAllDeploymentQueue", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('clean-docker-builder') + .description('settings cleanDockerBuilder') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.cleanDockerBuilder", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('clean-docker-prune') + .description('settings cleanDockerPrune') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.cleanDockerPrune", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('clean-monitoring') + .description('settings cleanMonitoring') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.cleanMonitoring", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('clean-redis') + .description('settings cleanRedis') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.cleanRedis", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('clean-sshprivate-key') + .description('settings cleanSSHPrivateKey') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.cleanSSHPrivateKey", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('clean-stopped-containers') + .description('settings cleanStoppedContainers') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.cleanStoppedContainers", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('clean-unused-images') + .description('settings cleanUnusedImages') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.cleanUnusedImages", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('clean-unused-volumes') + .description('settings cleanUnusedVolumes') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.cleanUnusedVolumes", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('get-dokploy-cloud-ips') + .description('settings getDokployCloudIps') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.getDokployCloudIps", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('get-dokploy-version') + .description('settings getDokployVersion') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.getDokployVersion", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('get-ip') + .description('settings getIp') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.getIp", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('get-log-cleanup-status') + .description('settings getLogCleanupStatus') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.getLogCleanupStatus", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('get-open-api-document') + .description('settings getOpenApiDocument') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.getOpenApiDocument", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('get-release-tag') + .description('settings getReleaseTag') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.getReleaseTag", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('get-traefik-ports') + .description('settings getTraefikPorts') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.getTraefikPorts", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('get-update-data') + .description('settings getUpdateData') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.getUpdateData", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('get-web-server-settings') + .description('settings getWebServerSettings') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.getWebServerSettings", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('have-activate-requests') + .description('settings haveActivateRequests') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.haveActivateRequests", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('have-traefik-dashboard-port-enabled') + .description('settings haveTraefikDashboardPortEnabled') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.haveTraefikDashboardPortEnabled", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('health') + .description('settings health') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.health", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('is-cloud') + .description('settings isCloud') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.isCloud", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('is-user-subscribed') + .description('settings isUserSubscribed') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.isUserSubscribed", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('read-directories') + .description('settings readDirectories') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.readDirectories", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('read-middleware-traefik-config') + .description('settings readMiddlewareTraefikConfig') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.readMiddlewareTraefikConfig", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('read-traefik-config') + .description('settings readTraefikConfig') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.readTraefikConfig", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('read-traefik-env') + .description('settings readTraefikEnv') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.readTraefikEnv", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('read-traefik-file') + .description('settings readTraefikFile') + .requiredOption('--path ', 'path') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.readTraefikFile", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('read-web-server-traefik-config') + .description('settings readWebServerTraefikConfig') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("settings.readWebServerTraefikConfig", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('reload-redis') + .description('settings reloadRedis') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.reloadRedis", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('reload-server') + .description('settings reloadServer') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.reloadServer", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('reload-traefik') + .description('settings reloadTraefik') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.reloadTraefik", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('save-sshprivate-key') + .description('settings saveSSHPrivateKey') + .requiredOption('--sshPrivateKey ', 'sshPrivateKey') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.saveSSHPrivateKey", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('setup-gpu') + .description('settings setupGPU') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.setupGPU", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('toggle-dashboard') + .description('settings toggleDashboard') + .option('--enableDashboard', 'enableDashboard') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["enableDashboard"] != null) opts["enableDashboard"] = opts["enableDashboard"] === true || opts["enableDashboard"] === "true"; + const data = await apiPost("settings.toggleDashboard", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('toggle-requests') + .description('settings toggleRequests') + .requiredOption('--enable', 'enable') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["enable"] != null) opts["enable"] = opts["enable"] === true || opts["enable"] === "true"; + const data = await apiPost("settings.toggleRequests", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('update-docker-cleanup') + .description('settings updateDockerCleanup') + .requiredOption('--enableDockerCleanup', 'enableDockerCleanup') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["enableDockerCleanup"] != null) opts["enableDockerCleanup"] = opts["enableDockerCleanup"] === true || opts["enableDockerCleanup"] === "true"; + const data = await apiPost("settings.updateDockerCleanup", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('update-log-cleanup') + .description('settings updateLogCleanup') + .requiredOption('--cronExpression ', 'cronExpression') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.updateLogCleanup", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('update-middleware-traefik-config') + .description('settings updateMiddlewareTraefikConfig') + .requiredOption('--traefikConfig ', 'traefikConfig') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.updateMiddlewareTraefikConfig", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('update-server') + .description('settings updateServer') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.updateServer", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('update-server-ip') + .description('settings updateServerIp') + .requiredOption('--serverIp ', 'serverIp') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.updateServerIp", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('update-traefik-config') + .description('settings updateTraefikConfig') + .requiredOption('--traefikConfig ', 'traefikConfig') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.updateTraefikConfig", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('update-traefik-file') + .description('settings updateTraefikFile') + .requiredOption('--path ', 'path') + .requiredOption('--traefikConfig ', 'traefikConfig') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.updateTraefikFile", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('update-traefik-ports') + .description('settings updateTraefikPorts') + .option('--serverId ', 'serverId') + .requiredOption('--additionalPorts ', 'additionalPorts') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.updateTraefikPorts", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('update-web-server-traefik-config') + .description('settings updateWebServerTraefikConfig') + .requiredOption('--traefikConfig ', 'traefikConfig') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.updateWebServerTraefikConfig", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_settings + .command('write-traefik-env') + .description('settings writeTraefikEnv') + .requiredOption('--env ', 'env') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("settings.writeTraefikEnv", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_sshKey = program.command('ssh-key').description('ssh-key commands'); + + g_sshKey + .command('all') + .description('sshKey all') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("sshKey.all", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_sshKey + .command('create') + .description('sshKey create') + .requiredOption('--name ', 'name') + .option('--description ', 'description') + .requiredOption('--privateKey ', 'privateKey') + .requiredOption('--publicKey ', 'publicKey') + .requiredOption('--organizationId ', 'organizationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("sshKey.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_sshKey + .command('generate') + .description('sshKey generate') + .option('--type ', 'type (rsa, ed25519)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("sshKey.generate", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_sshKey + .command('one') + .description('sshKey one') + .requiredOption('--sshKeyId ', 'sshKeyId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("sshKey.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_sshKey + .command('remove') + .description('sshKey remove') + .requiredOption('--sshKeyId ', 'sshKeyId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("sshKey.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_sshKey + .command('update') + .description('sshKey update') + .option('--name ', 'name') + .option('--description ', 'description') + .option('--lastUsedAt ', 'lastUsedAt') + .requiredOption('--sshKeyId ', 'sshKeyId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("sshKey.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_sso = program.command('sso').description('sso commands'); + + g_sso + .command('add-trusted-origin') + .description('sso addTrustedOrigin') + .requiredOption('--origin ', 'origin') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("sso.addTrustedOrigin", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_sso + .command('delete-provider') + .description('sso deleteProvider') + .requiredOption('--providerId ', 'providerId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("sso.deleteProvider", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_sso + .command('get-trusted-origins') + .description('sso getTrustedOrigins') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("sso.getTrustedOrigins", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_sso + .command('list-providers') + .description('sso listProviders') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("sso.listProviders", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_sso + .command('one') + .description('sso one') + .requiredOption('--providerId ', 'providerId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("sso.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_sso + .command('register') + .description('sso register') + .requiredOption('--providerId ', 'providerId') + .requiredOption('--issuer ', 'issuer') + .requiredOption('--domains ', 'domains') + .option('--oidcConfig ', 'oidcConfig') + .option('--samlConfig ', 'samlConfig') + .option('--organizationId ', 'organizationId') + .option('--overrideUserInfo', 'overrideUserInfo') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["overrideUserInfo"] != null) opts["overrideUserInfo"] = opts["overrideUserInfo"] === true || opts["overrideUserInfo"] === "true"; + const data = await apiPost("sso.register", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_sso + .command('remove-trusted-origin') + .description('sso removeTrustedOrigin') + .requiredOption('--origin ', 'origin') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("sso.removeTrustedOrigin", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_sso + .command('show-sign-in-with-sso') + .description('sso showSignInWithSSO') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("sso.showSignInWithSSO", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_sso + .command('update') + .description('sso update') + .requiredOption('--providerId ', 'providerId') + .requiredOption('--issuer ', 'issuer') + .requiredOption('--domains ', 'domains') + .option('--oidcConfig ', 'oidcConfig') + .option('--samlConfig ', 'samlConfig') + .option('--organizationId ', 'organizationId') + .option('--overrideUserInfo', 'overrideUserInfo') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["overrideUserInfo"] != null) opts["overrideUserInfo"] = opts["overrideUserInfo"] === true || opts["overrideUserInfo"] === "true"; + const data = await apiPost("sso.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_sso + .command('update-trusted-origin') + .description('sso updateTrustedOrigin') + .requiredOption('--oldOrigin ', 'oldOrigin') + .requiredOption('--newOrigin ', 'newOrigin') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("sso.updateTrustedOrigin", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_stripe = program.command('stripe').description('stripe commands'); + + g_stripe + .command('can-create-more-servers') + .description('stripe canCreateMoreServers') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("stripe.canCreateMoreServers", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_stripe + .command('create-checkout-session') + .description('stripe createCheckoutSession') + .requiredOption('--tier ', 'tier (legacy, hobby, startup)') + .requiredOption('--productId ', 'productId') + .requiredOption('--serverQuantity ', 'serverQuantity') + .requiredOption('--isAnnual', 'isAnnual') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["serverQuantity"] != null) opts["serverQuantity"] = Number(opts["serverQuantity"]); + if (opts["isAnnual"] != null) opts["isAnnual"] = opts["isAnnual"] === true || opts["isAnnual"] === "true"; + const data = await apiPost("stripe.createCheckoutSession", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_stripe + .command('create-customer-portal-session') + .description('stripe createCustomerPortalSession') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("stripe.createCustomerPortalSession", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_stripe + .command('get-current-plan') + .description('stripe getCurrentPlan') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("stripe.getCurrentPlan", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_stripe + .command('get-invoices') + .description('stripe getInvoices') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("stripe.getInvoices", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_stripe + .command('get-products') + .description('stripe getProducts') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("stripe.getProducts", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_stripe + .command('upgrade-subscription') + .description('stripe upgradeSubscription') + .requiredOption('--tier ', 'tier (hobby, startup)') + .requiredOption('--serverQuantity ', 'serverQuantity') + .requiredOption('--isAnnual', 'isAnnual') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["serverQuantity"] != null) opts["serverQuantity"] = Number(opts["serverQuantity"]); + if (opts["isAnnual"] != null) opts["isAnnual"] = opts["isAnnual"] === true || opts["isAnnual"] === "true"; + const data = await apiPost("stripe.upgradeSubscription", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_swarm = program.command('swarm').description('swarm commands'); + + g_swarm + .command('get-node-apps') + .description('swarm getNodeApps') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("swarm.getNodeApps", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_swarm + .command('get-node-info') + .description('swarm getNodeInfo') + .requiredOption('--nodeId ', 'nodeId') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("swarm.getNodeInfo", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_swarm + .command('get-nodes') + .description('swarm getNodes') + .option('--serverId ', 'serverId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("swarm.getNodes", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_user = program.command('user').description('user commands'); + + g_user + .command('all') + .description('user all') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("user.all", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('assign-permissions') + .description('user assignPermissions') + .requiredOption('--id ', 'id') + .requiredOption('--accessedProjects ', 'accessedProjects') + .requiredOption('--accessedEnvironments ', 'accessedEnvironments') + .requiredOption('--accessedServices ', 'accessedServices') + .requiredOption('--canCreateProjects', 'canCreateProjects') + .requiredOption('--canCreateServices', 'canCreateServices') + .requiredOption('--canDeleteProjects', 'canDeleteProjects') + .requiredOption('--canDeleteServices', 'canDeleteServices') + .requiredOption('--canAccessToDocker', 'canAccessToDocker') + .requiredOption('--canAccessToTraefikFiles', 'canAccessToTraefikFiles') + .requiredOption('--canAccessToAPI', 'canAccessToAPI') + .requiredOption('--canAccessToSSHKeys', 'canAccessToSSHKeys') + .requiredOption('--canAccessToGitProviders', 'canAccessToGitProviders') + .requiredOption('--canDeleteEnvironments', 'canDeleteEnvironments') + .requiredOption('--canCreateEnvironments', 'canCreateEnvironments') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["canCreateProjects"] != null) opts["canCreateProjects"] = opts["canCreateProjects"] === true || opts["canCreateProjects"] === "true"; + if (opts["canCreateServices"] != null) opts["canCreateServices"] = opts["canCreateServices"] === true || opts["canCreateServices"] === "true"; + if (opts["canDeleteProjects"] != null) opts["canDeleteProjects"] = opts["canDeleteProjects"] === true || opts["canDeleteProjects"] === "true"; + if (opts["canDeleteServices"] != null) opts["canDeleteServices"] = opts["canDeleteServices"] === true || opts["canDeleteServices"] === "true"; + if (opts["canAccessToDocker"] != null) opts["canAccessToDocker"] = opts["canAccessToDocker"] === true || opts["canAccessToDocker"] === "true"; + if (opts["canAccessToTraefikFiles"] != null) opts["canAccessToTraefikFiles"] = opts["canAccessToTraefikFiles"] === true || opts["canAccessToTraefikFiles"] === "true"; + if (opts["canAccessToAPI"] != null) opts["canAccessToAPI"] = opts["canAccessToAPI"] === true || opts["canAccessToAPI"] === "true"; + if (opts["canAccessToSSHKeys"] != null) opts["canAccessToSSHKeys"] = opts["canAccessToSSHKeys"] === true || opts["canAccessToSSHKeys"] === "true"; + if (opts["canAccessToGitProviders"] != null) opts["canAccessToGitProviders"] = opts["canAccessToGitProviders"] === true || opts["canAccessToGitProviders"] === "true"; + if (opts["canDeleteEnvironments"] != null) opts["canDeleteEnvironments"] = opts["canDeleteEnvironments"] === true || opts["canDeleteEnvironments"] === "true"; + if (opts["canCreateEnvironments"] != null) opts["canCreateEnvironments"] = opts["canCreateEnvironments"] === true || opts["canCreateEnvironments"] === "true"; + const data = await apiPost("user.assignPermissions", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('check-user-organizations') + .description('user checkUserOrganizations') + .requiredOption('--userId ', 'userId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("user.checkUserOrganizations", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('create-api-key') + .description('user createApiKey') + .requiredOption('--name ', 'name') + .option('--prefix ', 'prefix') + .option('--expiresIn ', 'expiresIn') + .requiredOption('--metadata ', 'metadata') + .option('--rateLimitEnabled', 'rateLimitEnabled') + .option('--rateLimitTimeWindow ', 'rateLimitTimeWindow') + .option('--rateLimitMax ', 'rateLimitMax') + .option('--remaining ', 'remaining') + .option('--refillAmount ', 'refillAmount') + .option('--refillInterval ', 'refillInterval') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["expiresIn"] != null) opts["expiresIn"] = Number(opts["expiresIn"]); + if (opts["rateLimitEnabled"] != null) opts["rateLimitEnabled"] = opts["rateLimitEnabled"] === true || opts["rateLimitEnabled"] === "true"; + if (opts["rateLimitTimeWindow"] != null) opts["rateLimitTimeWindow"] = Number(opts["rateLimitTimeWindow"]); + if (opts["rateLimitMax"] != null) opts["rateLimitMax"] = Number(opts["rateLimitMax"]); + if (opts["remaining"] != null) opts["remaining"] = Number(opts["remaining"]); + if (opts["refillAmount"] != null) opts["refillAmount"] = Number(opts["refillAmount"]); + if (opts["refillInterval"] != null) opts["refillInterval"] = Number(opts["refillInterval"]); + const data = await apiPost("user.createApiKey", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('delete-api-key') + .description('user deleteApiKey') + .requiredOption('--apiKeyId ', 'apiKeyId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("user.deleteApiKey", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('generate-token') + .description('user generateToken') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("user.generateToken", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('get') + .description('user get') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("user.get", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('get-backups') + .description('user getBackups') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("user.getBackups", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('get-container-metrics') + .description('user getContainerMetrics') + .requiredOption('--url ', 'url') + .requiredOption('--token ', 'token') + .requiredOption('--appName ', 'appName') + .requiredOption('--dataPoints ', 'dataPoints') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("user.getContainerMetrics", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('get-invitations') + .description('user getInvitations') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("user.getInvitations", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('get-metrics-token') + .description('user getMetricsToken') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("user.getMetricsToken", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('get-server-metrics') + .description('user getServerMetrics') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("user.getServerMetrics", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('get-user-by-token') + .description('user getUserByToken') + .requiredOption('--token ', 'token') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("user.getUserByToken", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('have-root-access') + .description('user haveRootAccess') + + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("user.haveRootAccess", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('one') + .description('user one') + .requiredOption('--userId ', 'userId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("user.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('remove') + .description('user remove') + .requiredOption('--userId ', 'userId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("user.remove", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('send-invitation') + .description('user sendInvitation') + .requiredOption('--invitationId ', 'invitationId') + .requiredOption('--notificationId ', 'notificationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("user.sendInvitation", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_user + .command('update') + .description('user update') + .option('--id ', 'id') + .option('--firstName ', 'firstName') + .option('--lastName ', 'lastName') + .option('--isRegistered', 'isRegistered') + .option('--expirationDate ', 'expirationDate') + .option('--createdAt2 ', 'createdAt2') + .option('--createdAt ', 'createdAt') + .option('--twoFactorEnabled', 'twoFactorEnabled') + .option('--email ', 'email') + .option('--emailVerified', 'emailVerified') + .option('--image ', 'image') + .option('--banned', 'banned') + .option('--banReason ', 'banReason') + .option('--banExpires ', 'banExpires') + .option('--updatedAt ', 'updatedAt') + .option('--enablePaidFeatures', 'enablePaidFeatures') + .option('--allowImpersonation', 'allowImpersonation') + .option('--enableEnterpriseFeatures', 'enableEnterpriseFeatures') + .option('--licenseKey ', 'licenseKey') + .option('--stripeCustomerId ', 'stripeCustomerId') + .option('--stripeSubscriptionId ', 'stripeSubscriptionId') + .option('--serversQuantity ', 'serversQuantity') + .option('--password ', 'password') + .option('--currentPassword ', 'currentPassword') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["isRegistered"] != null) opts["isRegistered"] = opts["isRegistered"] === true || opts["isRegistered"] === "true"; + if (opts["twoFactorEnabled"] != null) opts["twoFactorEnabled"] = opts["twoFactorEnabled"] === true || opts["twoFactorEnabled"] === "true"; + if (opts["emailVerified"] != null) opts["emailVerified"] = opts["emailVerified"] === true || opts["emailVerified"] === "true"; + if (opts["banned"] != null) opts["banned"] = opts["banned"] === true || opts["banned"] === "true"; + if (opts["enablePaidFeatures"] != null) opts["enablePaidFeatures"] = opts["enablePaidFeatures"] === true || opts["enablePaidFeatures"] === "true"; + if (opts["allowImpersonation"] != null) opts["allowImpersonation"] = opts["allowImpersonation"] === true || opts["allowImpersonation"] === "true"; + if (opts["enableEnterpriseFeatures"] != null) opts["enableEnterpriseFeatures"] = opts["enableEnterpriseFeatures"] === true || opts["enableEnterpriseFeatures"] === "true"; + if (opts["serversQuantity"] != null) opts["serversQuantity"] = Number(opts["serversQuantity"]); + const data = await apiPost("user.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + const g_volumeBackups = program.command('volume-backups').description('volume-backups commands'); + + g_volumeBackups + .command('create') + .description('volumeBackups create') + .requiredOption('--name ', 'name') + .requiredOption('--volumeName ', 'volumeName') + .requiredOption('--prefix ', 'prefix') + .option('--serviceType ', 'serviceType (application, postgres, mysql, mariadb, mongo, redis, compose)') + .option('--appName ', 'appName') + .option('--serviceName ', 'serviceName') + .option('--turnOff', 'turnOff') + .requiredOption('--cronExpression ', 'cronExpression') + .option('--keepLatestCount ', 'keepLatestCount') + .option('--enabled', 'enabled') + .option('--applicationId ', 'applicationId') + .option('--postgresId ', 'postgresId') + .option('--mariadbId ', 'mariadbId') + .option('--mongoId ', 'mongoId') + .option('--mysqlId ', 'mysqlId') + .option('--redisId ', 'redisId') + .option('--composeId ', 'composeId') + .option('--createdAt ', 'createdAt') + .requiredOption('--destinationId ', 'destinationId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["turnOff"] != null) opts["turnOff"] = opts["turnOff"] === true || opts["turnOff"] === "true"; + if (opts["keepLatestCount"] != null) opts["keepLatestCount"] = Number(opts["keepLatestCount"]); + if (opts["enabled"] != null) opts["enabled"] = opts["enabled"] === true || opts["enabled"] === "true"; + const data = await apiPost("volumeBackups.create", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_volumeBackups + .command('delete') + .description('volumeBackups delete') + .requiredOption('--volumeBackupId ', 'volumeBackupId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("volumeBackups.delete", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_volumeBackups + .command('list') + .description('volumeBackups list') + .requiredOption('--id ', 'id') + .requiredOption('--volumeBackupType ', 'volumeBackupType (application, postgres, mysql, mariadb, mongo, redis, compose)') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("volumeBackups.list", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_volumeBackups + .command('one') + .description('volumeBackups one') + .requiredOption('--volumeBackupId ', 'volumeBackupId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiGet("volumeBackups.one", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_volumeBackups + .command('run-manually') + .description('volumeBackups runManually') + .requiredOption('--volumeBackupId ', 'volumeBackupId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + + const data = await apiPost("volumeBackups.runManually", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); + + g_volumeBackups + .command('update') + .description('volumeBackups update') + .requiredOption('--name ', 'name') + .requiredOption('--volumeName ', 'volumeName') + .requiredOption('--prefix ', 'prefix') + .option('--serviceType ', 'serviceType (application, postgres, mysql, mariadb, mongo, redis, compose)') + .option('--appName ', 'appName') + .option('--serviceName ', 'serviceName') + .option('--turnOff', 'turnOff') + .requiredOption('--cronExpression ', 'cronExpression') + .option('--keepLatestCount ', 'keepLatestCount') + .option('--enabled', 'enabled') + .option('--applicationId ', 'applicationId') + .option('--postgresId ', 'postgresId') + .option('--mariadbId ', 'mariadbId') + .option('--mongoId ', 'mongoId') + .option('--mysqlId ', 'mysqlId') + .option('--redisId ', 'redisId') + .option('--composeId ', 'composeId') + .option('--createdAt ', 'createdAt') + .requiredOption('--destinationId ', 'destinationId') + .requiredOption('--volumeBackupId ', 'volumeBackupId') + .option('--json', 'Output raw JSON') + .action(async (opts: Record) => { + const jsonOutput = opts.json; delete opts.json; + if (opts["turnOff"] != null) opts["turnOff"] = opts["turnOff"] === true || opts["turnOff"] === "true"; + if (opts["keepLatestCount"] != null) opts["keepLatestCount"] = Number(opts["keepLatestCount"]); + if (opts["enabled"] != null) opts["enabled"] = opts["enabled"] === true || opts["enabled"] === "true"; + const data = await apiPost("volumeBackups.update", opts); + if (jsonOutput) { + console.log(JSON.stringify(data, null, 2)); + } else { + printOutput(data); + } + }); +} diff --git a/src/index.ts b/src/index.ts index e32b0b2..3e6b1c5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,30 @@ -export {run} from '@oclif/core' +#!/usr/bin/env node + +import chalk from "chalk"; +import { program } from "commander"; +import { registerAuthCommand } from "./commands/auth.js"; +import { registerGeneratedCommands } from "./generated/commands.js"; + +const pkg = { + name: "dokploy", + version: "0.3.0", + description: "Dokploy CLI - Manage your Dokploy server", +}; + +program + .name(pkg.name) + .version(pkg.version) + .description(pkg.description) + .action(() => { + program.help(); + }); + +registerAuthCommand(program); +registerGeneratedCommands(program); + +const argv = process.argv.filter((arg) => arg !== "--"); + +program.parseAsync(argv).catch((err) => { + console.error(chalk.red(err.message)); + process.exit(1); +}); diff --git a/src/utils/http.ts b/src/utils/http.ts deleted file mode 100644 index b27d636..0000000 --- a/src/utils/http.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const headers = { - "Content-Type": "application/json", - "User-Agent": "Dokploy CLI", -}; diff --git a/src/utils/shared.ts b/src/utils/shared.ts deleted file mode 100644 index ad7e832..0000000 --- a/src/utils/shared.ts +++ /dev/null @@ -1,114 +0,0 @@ -import type { Command } from "@oclif/core"; - -import axios from "axios"; -import chalk from "chalk"; - -import type { AuthConfig } from "./utils.js"; - -export type Application = { - applicationId: string; - name: string; - // Add other application properties as needed -}; - -export type Database = { - mariadbId?: string; - mongoId?: string; - mysqlId?: string; - postgresId?: string; - redisId?: string; - name: string; - // Add other database properties as needed -}; - -export type Environment = { - name: string; - environmentId: string; - description: string; - createdAt: string; - env: string; - projectId: string; - applications: Application[]; - mariadb: Database[]; - mongo: Database[]; - mysql: Database[]; - postgres: Database[]; - redis: Database[]; - compose: any[]; -}; - -export type Project = { - adminId: string; - name: string; - projectId?: string | undefined; - description?: string | undefined; - environments?: Environment[]; -}; - -export const getProjects = async ( - auth: AuthConfig, - command: Command, -): Promise => { - try { - const response = await axios.get(`${auth.url}/api/trpc/project.all`, { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - }); - - if (!response.data.result.data.json) { - command.error(chalk.red("Error fetching projects")); - } - - const projects = response.data.result.data.json; - - if (projects.length === 0) { - command.log(chalk.yellow("No projects found.")); - return []; - } - - return projects; - } catch (error) { - // @ts-expect-error TODO: Fix this - command.error(chalk.red(`Failed to fetch project list: ${error.message}`)); - } -}; - -export const getProject = async ( - projectId: string | undefined, - auth: AuthConfig, - command: Command, -) => { - try { - if (!projectId) { - command.error(chalk.red("Project ID is required")); - } - const response = await axios.get(`${auth.url}/api/trpc/project.one`, { - headers: { - "x-api-key": auth.token, - "Content-Type": "application/json", - }, - params: { - input: JSON.stringify({ - json: { projectId }, - }), - }, - }); - - if (!response.data.result.data.json) { - command.error(chalk.red("Error fetching project")); - } - - const project = response.data.result.data.json; - - if (!project) { - command.error(chalk.red("Error fetching project")); - } - - return project; - } catch (error) { - // @ts-expect-error TODO: Fix this - command.error(chalk.red(`Failed to fetch project: ${error.message}`)); - } -}; diff --git a/src/utils/slug.ts b/src/utils/slug.ts deleted file mode 100644 index 1c79a8c..0000000 --- a/src/utils/slug.ts +++ /dev/null @@ -1,14 +0,0 @@ -import slug from "./slugify.js"; - -export const slugify = (text: string | undefined) => { - if (!text) { - return ""; - } - - const cleanedText = text.trim().replaceAll(/[^\d\sA-Za-z]/g, ""); - return slug(cleanedText, { - lower: true, - strict: true, - trim: true, - }); -}; diff --git a/src/utils/slugify.ts b/src/utils/slugify.ts deleted file mode 100644 index c68e030..0000000 --- a/src/utils/slugify.ts +++ /dev/null @@ -1,3 +0,0 @@ -import slugify from "slugify"; - -export default slugify as unknown as typeof slugify.default; diff --git a/src/utils/utils.ts b/src/utils/utils.ts deleted file mode 100644 index 62661eb..0000000 --- a/src/utils/utils.ts +++ /dev/null @@ -1,48 +0,0 @@ -import type { Command } from "@oclif/core"; - -import chalk from "chalk"; -import * as fs from "node:fs"; -import * as path from "node:path"; -import { fileURLToPath } from "node:url"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const configPath = path.join(__dirname, "..", "..", "config.json"); - -export type AuthConfig = { - token: string; - url: string; -}; - -export const readAuthConfig = async (command: Command): Promise => { - // Primero intentar leer desde variables de entorno - const envToken = process.env.DOKPLOY_AUTH_TOKEN; - const envUrl = process.env.DOKPLOY_URL; - - if (envToken && envUrl) { - return { token: envToken, url: envUrl }; - } - - // Si no hay variables de entorno, usar el archivo de configuración - if (!fs.existsSync(configPath)) { - command.error( - chalk.red( - "No configuration file found and no environment variables set. Please authenticate first using the 'authenticate' command or set DOKPLOY_URL and DOKPLOY_AUTH_TOKEN environment variables.", - ), - ); - } - - const configFileContent = fs.readFileSync(configPath, "utf8"); - const config = JSON.parse(configFileContent); - const { token, url } = config; - - if (!url || !token) { - command.error( - chalk.red( - "Incomplete authentication details. Please authenticate again using the 'authenticate' command or set environment variables.", - ), - ); - } - - return { token, url }; -}; diff --git a/tests/cli.test.ts b/tests/cli.test.ts new file mode 100644 index 0000000..bd4b650 --- /dev/null +++ b/tests/cli.test.ts @@ -0,0 +1,86 @@ +import { execFileSync } from "node:child_process"; +import * as path from "node:path"; +import { fileURLToPath } from "node:url"; +import { describe, expect, it } from "vitest"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.resolve(__dirname, ".."); +const CLI = path.join(ROOT, "dist", "index.js"); + +function run(...args: string[]): string { + return execFileSync("node", [CLI, ...args], { + encoding: "utf8", + env: { ...process.env, NO_COLOR: "1" }, + }); +} + +describe("CLI", () => { + it("should show help with --help", () => { + const output = run("--help"); + expect(output).toContain("Dokploy CLI"); + expect(output).toContain("auth"); + expect(output).toContain("application"); + expect(output).toContain("project"); + }); + + it("should show version with --version", () => { + const output = run("--version"); + expect(output.trim()).toMatch(/^\d+\.\d+\.\d+$/); + }); + + it("should show subcommands for application", () => { + const output = run("application", "--help"); + expect(output).toContain("create"); + expect(output).toContain("deploy"); + expect(output).toContain("delete"); + expect(output).toContain("stop"); + }); + + it("should show subcommands for postgres", () => { + const output = run("postgres", "--help"); + expect(output).toContain("create"); + expect(output).toContain("deploy"); + expect(output).toContain("remove"); + }); + + it("should show options for a specific command", () => { + const output = run("application", "create", "--help"); + expect(output).toContain("--name"); + expect(output).toContain("--environmentId"); + }); + + it("should show auth command options", () => { + const output = run("auth", "--help"); + expect(output).toContain("--url"); + expect(output).toContain("--token"); + }); + + it("should show all expected command groups", () => { + const output = run("--help"); + const expectedGroups = [ + "application", + "postgres", + "mysql", + "redis", + "mongo", + "mariadb", + "compose", + "docker", + "project", + "server", + "domain", + "backup", + "settings", + "user", + "environment", + ]; + for (const group of expectedGroups) { + expect(output).toContain(group); + } + }); + + it("should exit with 0 when no args provided", () => { + const output = run(); + expect(output).toContain("Usage:"); + }); +}); diff --git a/tests/client.test.ts b/tests/client.test.ts new file mode 100644 index 0000000..849213f --- /dev/null +++ b/tests/client.test.ts @@ -0,0 +1,56 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("readAuthConfig", () => { + const originalEnv = { ...process.env }; + + beforeEach(() => { + delete process.env.DOKPLOY_URL; + delete process.env.DOKPLOY_API_KEY; + delete process.env.DOKPLOY_AUTH_TOKEN; + }); + + afterEach(() => { + process.env = { ...originalEnv }; + vi.restoreAllMocks(); + }); + + it("should read from DOKPLOY_API_KEY env var", async () => { + process.env.DOKPLOY_URL = "https://test.dokploy.com"; + process.env.DOKPLOY_API_KEY = "test-key-123"; + + const { readAuthConfig } = await import("../src/client.js"); + const config = readAuthConfig(); + + expect(config.url).toBe("https://test.dokploy.com"); + expect(config.token).toBe("test-key-123"); + }); + + it("should read from DOKPLOY_AUTH_TOKEN env var as fallback", async () => { + process.env.DOKPLOY_URL = "https://test.dokploy.com"; + process.env.DOKPLOY_AUTH_TOKEN = "auth-token-456"; + + const { readAuthConfig } = await import("../src/client.js"); + const config = readAuthConfig(); + + expect(config.url).toBe("https://test.dokploy.com"); + expect(config.token).toBe("auth-token-456"); + }); + + it("should prefer DOKPLOY_API_KEY over DOKPLOY_AUTH_TOKEN", async () => { + process.env.DOKPLOY_URL = "https://test.dokploy.com"; + process.env.DOKPLOY_API_KEY = "api-key"; + process.env.DOKPLOY_AUTH_TOKEN = "auth-token"; + + const { readAuthConfig } = await import("../src/client.js"); + const config = readAuthConfig(); + + expect(config.token).toBe("api-key"); + }); +}); + +describe("saveAuthConfig", () => { + it("should write config with correct structure", async () => { + const { saveAuthConfig } = await import("../src/client.js"); + expect(typeof saveAuthConfig).toBe("function"); + }); +}); diff --git a/tests/generator.test.ts b/tests/generator.test.ts new file mode 100644 index 0000000..1afc659 --- /dev/null +++ b/tests/generator.test.ts @@ -0,0 +1,63 @@ +import * as fs from "node:fs"; +import * as path from "node:path"; +import { fileURLToPath } from "node:url"; +import { describe, expect, it } from "vitest"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.resolve(__dirname, ".."); + +describe("generator", () => { + const specPath = path.join(ROOT, "openapi.json"); + const generatedPath = path.join(ROOT, "src", "generated", "commands.ts"); + + it("openapi.json should exist", () => { + expect(fs.existsSync(specPath)).toBe(true); + }); + + it("generated commands file should exist", () => { + expect(fs.existsSync(generatedPath)).toBe(true); + }); + + it("generated file should export registerGeneratedCommands", () => { + const content = fs.readFileSync(generatedPath, "utf8"); + expect(content).toContain("export function registerGeneratedCommands"); + }); + + it("generated file should import from client", () => { + const content = fs.readFileSync(generatedPath, "utf8"); + expect(content).toContain('from "../client.js"'); + }); + + it("generated file should contain command groups from the spec", () => { + const spec = JSON.parse(fs.readFileSync(specPath, "utf8")); + const content = fs.readFileSync(generatedPath, "utf8"); + + // Only check groups that have a dot-separated action (group.action) + const groups = new Set(); + for (const p of Object.keys(spec.paths)) { + const clean = p.replace(/^\//, ""); + const [group, ...rest] = clean.split("."); + if (group && rest.length > 0) groups.add(group); + } + + for (const group of groups) { + expect(content).toContain(`"${group}.`); + } + }); + + it("number of apiPost/apiGet calls should match valid endpoints", () => { + const spec = JSON.parse(fs.readFileSync(specPath, "utf8")); + const content = fs.readFileSync(generatedPath, "utf8"); + + // Count only endpoints with group.action pattern + let validEndpoints = 0; + for (const p of Object.keys(spec.paths)) { + const clean = p.replace(/^\//, ""); + const [group, ...rest] = clean.split("."); + if (group && rest.length > 0) validEndpoints++; + } + + const apiCalls = (content.match(/await api(Post|Get)\(/g) || []).length; + expect(apiCalls).toBe(validEndpoints); + }); +}); diff --git a/tsconfig.json b/tsconfig.json index 387201a..5f589e0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,6 +7,7 @@ "strict": true, "target": "es2022", "moduleResolution": "node16", + "skipLibCheck": true }, "include": ["./src/**/*"], "ts-node": { diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo new file mode 100644 index 0000000..db233f8 --- /dev/null +++ b/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./src/client.ts","./src/index.ts","./src/commands/auth.ts","./src/generated/commands.ts"],"version":"5.9.3"} \ No newline at end of file