diff --git a/.github/workflows/test.yml b/.github/workflows/ci.yml similarity index 55% rename from .github/workflows/test.yml rename to .github/workflows/ci.yml index 4a3d335de..3c484ccb6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -name: Run Tests +name: CI on: push: @@ -17,10 +17,13 @@ jobs: - name: Checkout code uses: actions/checkout@v4 + - name: Parse .tool-versions + uses: wistia/parse-tool-versions@v2.1.1 + - name: Setup Bun uses: oven-sh/setup-bun@v1 with: - bun-version: 1.2.20 + bun-version: '${{ env.BUN }}' - name: Install dependencies run: bun install @@ -28,10 +31,47 @@ jobs: - name: Run unit tests run: bun test:unit + lint: + name: Lint + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Parse .tool-versions + uses: wistia/parse-tool-versions@v2.1.1 + + - name: Setup Bun + uses: oven-sh/setup-bun@v1 + with: + bun-version: '${{ env.BUN }}' + + - name: Run linters and formatters + run: | + bun install + bun run format + bun run lint:fix + bun run lint + + - name: Fail if source files changed + run: | + # Check for changes excluding bun.lock (platform-specific) + CHANGED_FILES=$(git status --porcelain | grep -v "bun.lock" || true) + + if [[ -z "$CHANGED_FILES" ]]; then + echo "✅ No source file changes detected." + exit 0 + fi + + echo "❌ Code is not properly formatted. Please run 'bun run format && bun run lint:fix' and commit the changes." + echo "$CHANGED_FILES" + exit 1 + integration-tests: name: Integration Tests runs-on: ubuntu-latest - needs: unit-tests # run after unit tests pass + needs: unit-tests # run after unit tests pass # these are placeholders which is fine for integration tests env: @@ -54,10 +94,13 @@ jobs: - name: Checkout code uses: actions/checkout@v4 + - name: Parse .tool-versions + uses: wistia/parse-tool-versions@v2.1.1 + - name: Setup Bun uses: oven-sh/setup-bun@v1 with: - bun-version: 1.2.20 + bun-version: '${{ env.BUN }}' - name: Install dependencies run: bun install diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 000000000..24c0ffe7e --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +bun 1.2.20 \ No newline at end of file diff --git a/bun.lock b/bun.lock index 4d8bbfcc5..bc386b3d8 100644 --- a/bun.lock +++ b/bun.lock @@ -71,6 +71,7 @@ "echarts": "^6.0.0", "echarts-for-react": "^3.0.2", "fast-xml-parser": "^4.5.1", + "file-type": "^21.3.0", "geist": "^1.3.1", "immer": "^10.1.1", "lucide-react": "^0.525.0", @@ -211,6 +212,8 @@ "@bcoe/v8-coverage": ["@bcoe/v8-coverage@1.0.2", "", {}, "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA=="], + "@borewit/text-codec": ["@borewit/text-codec@0.2.1", "", {}, "sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw=="], + "@braintree/sanitize-url": ["@braintree/sanitize-url@7.1.1", "", {}, "sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw=="], "@bufbuild/buf": ["@bufbuild/buf@1.59.0", "", { "optionalDependencies": { "@bufbuild/buf-darwin-arm64": "1.59.0", "@bufbuild/buf-darwin-x64": "1.59.0", "@bufbuild/buf-linux-aarch64": "1.59.0", "@bufbuild/buf-linux-armv7": "1.59.0", "@bufbuild/buf-linux-x64": "1.59.0", "@bufbuild/buf-win32-arm64": "1.59.0", "@bufbuild/buf-win32-x64": "1.59.0" }, "bin": { "buf": "bin/buf", "protoc-gen-buf-breaking": "bin/protoc-gen-buf-breaking", "protoc-gen-buf-lint": "bin/protoc-gen-buf-lint" } }, "sha512-VdLuGnFp1OKJaiMevlLow6Jcvv9omOyM02Qa1zexl8dBB4Ac2ggz6bpT3Zb06tmCnqd8tFrI/Im1fbom3CznlQ=="], @@ -963,6 +966,10 @@ "@theguild/remark-mermaid": ["@theguild/remark-mermaid@0.2.0", "", { "dependencies": { "mermaid": "^11.0.0", "unist-util-visit": "^5.0.0" }, "peerDependencies": { "react": "^18.2.0" } }, "sha512-o8n57TJy0OI4PCrNw8z6S+vpHtrwoQZzTA5Y3fL0U1NDRIoMg/78duWgEBFsCZcWM1G6zjE91yg1aKCsDwgE2Q=="], + "@tokenizer/inflate": ["@tokenizer/inflate@0.4.1", "", { "dependencies": { "debug": "^4.4.3", "token-types": "^6.1.1" } }, "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA=="], + + "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], + "@tootallnate/once": ["@tootallnate/once@2.0.0", "", {}, "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A=="], "@trpc/client": ["@trpc/client@11.7.1", "", { "peerDependencies": { "@trpc/server": "11.7.1", "typescript": ">=5.7.2" } }, "sha512-uOnAjElKI892/U6aQMcBHYs3x7mme3Cvv1F87ytBL56rBvs7+DyK7r43zgaXKf13+GtPEI6ex5xjVUfyDW8XcQ=="], @@ -1759,6 +1766,8 @@ "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], + "file-type": ["file-type@21.3.0", "", { "dependencies": { "@tokenizer/inflate": "^0.4.1", "strtok3": "^10.3.4", "token-types": "^6.1.1", "uint8array-extras": "^1.4.0" } }, "sha512-8kPJMIGz1Yt/aPEwOsrR97ZyZaD1Iqm8PClb1nYFclUCkBi0Ma5IsYNQzvSFS9ib51lWyIw5mIT9rWzI/xjpzA=="], + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], @@ -1895,6 +1904,8 @@ "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], "immer": ["immer@10.2.0", "", {}, "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw=="], @@ -2639,6 +2650,8 @@ "strnum": ["strnum@1.1.2", "", {}, "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA=="], + "strtok3": ["strtok3@10.3.4", "", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg=="], + "stubs": ["stubs@3.0.0", "", {}, "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw=="], "style-to-js": ["style-to-js@1.1.19", "", { "dependencies": { "style-to-object": "1.0.12" } }, "sha512-Ev+SgeqiNGT1ufsXyVC5RrJRXdrkRJ1Gol9Qw7Pb72YCKJXrBvP0ckZhBeVSrw2m06DJpei2528uIpjMb4TsoQ=="], @@ -2697,6 +2710,8 @@ "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + "token-types": ["token-types@6.1.2", "", { "dependencies": { "@borewit/text-codec": "^0.2.1", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww=="], + "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], "tr46": ["tr46@4.1.1", "", { "dependencies": { "punycode": "^2.3.0" } }, "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw=="], @@ -2739,6 +2754,8 @@ "ufo": ["ufo@1.6.1", "", {}, "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA=="], + "uint8array-extras": ["uint8array-extras@1.5.0", "", {}, "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A=="], + "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], diff --git a/eslint.config.mjs b/eslint.config.mjs index 063fdd975..d5d4ac643 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -5,6 +5,7 @@ const compat = new FlatCompat({ }) const eslintConfig = [ + { ignores: ['.next/'] }, ...compat.config({ extends: ['next/core-web-vitals', 'next/typescript'], plugins: ['eslint-plugin-prettier'], diff --git a/package.json b/package.json index a49a3cedd..43d136b2e 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "build": "next build --turbopack", "start": "next start | pino-pretty --colorize", "preview": "next build --turbopack && next start | pino-pretty --colorize", - "lint": "next lint", - "lint:fix": "next lint --fix", + "lint": "eslint", + "lint:fix": "eslint --fix", "format": "prettier --write .", "prebuild": "bun scripts:check-app-env", "<<<<<<< Development Tools": "", diff --git a/spec/openapi.argus.yaml b/spec/openapi.argus.yaml index 87baf4dca..5400cab82 100644 --- a/spec/openapi.argus.yaml +++ b/spec/openapi.argus.yaml @@ -48,36 +48,36 @@ components: format: uuid responses: - "400": + '400': description: Bad request content: application/json: schema: - $ref: "#/components/schemas/Error" - "401": + $ref: '#/components/schemas/Error' + '401': description: Authentication error content: application/json: schema: - $ref: "#/components/schemas/Error" - "404": + $ref: '#/components/schemas/Error' + '404': description: Not found content: application/json: schema: - $ref: "#/components/schemas/Error" - "409": + $ref: '#/components/schemas/Error' + '409': description: Conflict content: application/json: schema: - $ref: "#/components/schemas/Error" - "500": + $ref: '#/components/schemas/Error' + '500': description: Server error content: application/json: schema: - $ref: "#/components/schemas/Error" + $ref: '#/components/schemas/Error' schemas: Error: @@ -274,8 +274,8 @@ paths: 200: description: Request was successful 401: - $ref: "#/components/responses/401" - + $ref: '#/components/responses/401' + /events/sandboxes/{sandboxID}: get: description: Get sandbox events @@ -285,7 +285,7 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/sandboxID" + - $ref: '#/components/parameters/sandboxID' - name: offset in: query required: false @@ -310,20 +310,20 @@ paths: type: boolean default: false responses: - "200": + '200': description: Successfully returned the sandbox events content: application/json: schema: type: array items: - $ref: "#/components/schemas/SandboxEvent" - "404": - $ref: "#/components/responses/404" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/SandboxEvent' + '404': + $ref: '#/components/responses/404' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /events/sandboxes: get: @@ -358,20 +358,20 @@ paths: type: boolean default: false responses: - "200": + '200': description: Successfully returned the sandbox events content: application/json: schema: type: array items: - $ref: "#/components/schemas/SandboxEvent" - "404": - $ref: "#/components/responses/404" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/SandboxEvent' + '404': + $ref: '#/components/responses/404' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /events/webhooks: post: @@ -387,45 +387,45 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/WebhookCreate" + $ref: '#/components/schemas/WebhookCreate' responses: - "201": + '201': description: Successfully created webhook. content: application/json: schema: - $ref: "#/components/schemas/WebhookCreation" - "400": - $ref: "#/components/responses/400" - "404": - $ref: "#/components/responses/404" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/WebhookCreation' + '400': + $ref: '#/components/responses/400' + '404': + $ref: '#/components/responses/404' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' get: - operationId: webhooksList - description: List registered webhooks. - tags: [webhooks] - security: - - ApiKeyAuth: [] - - Supabase1TokenAuth: [] - Supabase2TeamAuth: [] - responses: - "200": - description: List of registered webhooks. - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/WebhookDetail" - "404": - $ref: "#/components/responses/404" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + operationId: webhooksList + description: List registered webhooks. + tags: [webhooks] + security: + - ApiKeyAuth: [] + - Supabase1TokenAuth: [] + Supabase2TeamAuth: [] + responses: + '200': + description: List of registered webhooks. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/WebhookDetail' + '404': + $ref: '#/components/responses/404' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /events/webhooks/{webhookID}: get: @@ -437,20 +437,20 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/webhookID" + - $ref: '#/components/parameters/webhookID' responses: - "200": + '200': description: Successfully returned the webhook configuration. content: application/json: schema: - $ref: "#/components/schemas/WebhookDetail" - "404": - $ref: "#/components/responses/404" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/WebhookDetail' + '404': + $ref: '#/components/responses/404' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' patch: operationId: webhookUpdate @@ -461,28 +461,28 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/webhookID" + - $ref: '#/components/parameters/webhookID' requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/WebhookConfiguration" + $ref: '#/components/schemas/WebhookConfiguration' responses: - "200": + '200': description: Successfully updated webhook. content: application/json: schema: - $ref: "#/components/schemas/WebhookDetail" - "400": - $ref: "#/components/responses/400" - "404": - $ref: "#/components/responses/404" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/WebhookDetail' + '400': + $ref: '#/components/responses/400' + '404': + $ref: '#/components/responses/404' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' delete: operationId: webhookDelete @@ -493,13 +493,13 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/webhookID" + - $ref: '#/components/parameters/webhookID' responses: - "200": + '200': description: Successfully deleted webhook. - "404": - $ref: "#/components/responses/404" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" \ No newline at end of file + '404': + $ref: '#/components/responses/404' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' diff --git a/spec/openapi.infra.yaml b/spec/openapi.infra.yaml index 8979f5ee5..d88cb1ebe 100644 --- a/spec/openapi.infra.yaml +++ b/spec/openapi.infra.yaml @@ -95,42 +95,42 @@ components: type: string responses: - "400": + '400': description: Bad request content: application/json: schema: - $ref: "#/components/schemas/Error" - "401": + $ref: '#/components/schemas/Error' + '401': description: Authentication error content: application/json: schema: - $ref: "#/components/schemas/Error" - "403": + $ref: '#/components/schemas/Error' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/Error" - "404": + $ref: '#/components/schemas/Error' + '404': description: Not found content: application/json: schema: - $ref: "#/components/schemas/Error" - "409": + $ref: '#/components/schemas/Error' + '409': description: Conflict content: application/json: schema: - $ref: "#/components/schemas/Error" - "500": + $ref: '#/components/schemas/Error' + '500': description: Server error content: application/json: schema: - $ref: "#/components/schemas/Error" + $ref: '#/components/schemas/Error' schemas: Team: @@ -267,7 +267,7 @@ components: type: string description: Log message content level: - $ref: "#/components/schemas/LogLevel" + $ref: '#/components/schemas/LogLevel' fields: type: object additionalProperties: @@ -282,12 +282,12 @@ components: description: Logs of the sandbox type: array items: - $ref: "#/components/schemas/SandboxLog" + $ref: '#/components/schemas/SandboxLog' logEntries: description: Structured logs of the sandbox type: array items: - $ref: "#/components/schemas/SandboxLogEntry" + $ref: '#/components/schemas/SandboxLogEntry' SandboxMetric: description: Metric entry with timestamp and line @@ -356,7 +356,7 @@ components: deprecated: true description: Identifier of the client envdVersion: - $ref: "#/components/schemas/EnvdVersion" + $ref: '#/components/schemas/EnvdVersion' envdAccessToken: type: string description: Access token used for envd communication @@ -404,7 +404,7 @@ components: format: date-time description: Time when the sandbox will expire envdVersion: - $ref: "#/components/schemas/EnvdVersion" + $ref: '#/components/schemas/EnvdVersion' envdAccessToken: type: string description: Access token used for envd communication @@ -413,15 +413,15 @@ components: nullable: true description: Base domain where the sandbox traffic is accessible cpuCount: - $ref: "#/components/schemas/CPUCount" + $ref: '#/components/schemas/CPUCount' memoryMB: - $ref: "#/components/schemas/MemoryMB" + $ref: '#/components/schemas/MemoryMB' diskSizeMB: - $ref: "#/components/schemas/DiskSizeMB" + $ref: '#/components/schemas/DiskSizeMB' metadata: - $ref: "#/components/schemas/SandboxMetadata" + $ref: '#/components/schemas/SandboxMetadata' state: - $ref: "#/components/schemas/SandboxState" + $ref: '#/components/schemas/SandboxState' ListedSandbox: required: @@ -458,17 +458,17 @@ components: format: date-time description: Time when the sandbox will expire cpuCount: - $ref: "#/components/schemas/CPUCount" + $ref: '#/components/schemas/CPUCount' memoryMB: - $ref: "#/components/schemas/MemoryMB" + $ref: '#/components/schemas/MemoryMB' diskSizeMB: - $ref: "#/components/schemas/DiskSizeMB" + $ref: '#/components/schemas/DiskSizeMB' metadata: - $ref: "#/components/schemas/SandboxMetadata" + $ref: '#/components/schemas/SandboxMetadata' state: - $ref: "#/components/schemas/SandboxState" + $ref: '#/components/schemas/SandboxState' envdVersion: - $ref: "#/components/schemas/EnvdVersion" + $ref: '#/components/schemas/EnvdVersion' SandboxesWithMetrics: required: @@ -476,7 +476,7 @@ components: properties: sandboxes: additionalProperties: - $ref: "#/components/schemas/SandboxMetric" + $ref: '#/components/schemas/SandboxMetric' NewSandbox: required: @@ -504,13 +504,13 @@ components: Allow sandbox to access the internet. When set to false, it behaves the same as specifying denyOut to 0.0.0.0/0 in the network config. network: - $ref: "#/components/schemas/SandboxNetworkConfig" + $ref: '#/components/schemas/SandboxNetworkConfig' metadata: - $ref: "#/components/schemas/SandboxMetadata" + $ref: '#/components/schemas/SandboxMetadata' envVars: - $ref: "#/components/schemas/EnvVars" + $ref: '#/components/schemas/EnvVars' mcp: - $ref: "#/components/schemas/Mcp" + $ref: '#/components/schemas/Mcp' ResumedSandbox: properties: @@ -619,11 +619,11 @@ components: type: string description: Identifier of the last successful build for given template cpuCount: - $ref: "#/components/schemas/CPUCount" + $ref: '#/components/schemas/CPUCount' memoryMB: - $ref: "#/components/schemas/MemoryMB" + $ref: '#/components/schemas/MemoryMB' diskSizeMB: - $ref: "#/components/schemas/DiskSizeMB" + $ref: '#/components/schemas/DiskSizeMB' public: type: boolean description: Whether the template is public or only accessible by the team @@ -642,7 +642,7 @@ components: description: Time when the template was last updated createdBy: allOf: - - $ref: "#/components/schemas/TeamUser" + - $ref: '#/components/schemas/TeamUser' nullable: true lastSpawnedAt: type: string @@ -658,9 +658,9 @@ components: format: int32 description: Number of times the template was built envdVersion: - $ref: "#/components/schemas/EnvdVersion" + $ref: '#/components/schemas/EnvdVersion' buildStatus: - $ref: "#/components/schemas/TemplateBuildStatus" + $ref: '#/components/schemas/TemplateBuildStatus' TemplateRequestResponseV3: required: @@ -708,11 +708,11 @@ components: type: string description: Identifier of the last successful build for given template cpuCount: - $ref: "#/components/schemas/CPUCount" + $ref: '#/components/schemas/CPUCount' memoryMB: - $ref: "#/components/schemas/MemoryMB" + $ref: '#/components/schemas/MemoryMB' diskSizeMB: - $ref: "#/components/schemas/DiskSizeMB" + $ref: '#/components/schemas/DiskSizeMB' public: type: boolean description: Whether the template is public or only accessible by the team @@ -731,7 +731,7 @@ components: description: Time when the template was last updated createdBy: allOf: - - $ref: "#/components/schemas/TeamUser" + - $ref: '#/components/schemas/TeamUser' nullable: true lastSpawnedAt: type: string @@ -747,7 +747,7 @@ components: format: int32 description: Number of times the template was built envdVersion: - $ref: "#/components/schemas/EnvdVersion" + $ref: '#/components/schemas/EnvdVersion' TemplateBuild: required: @@ -763,7 +763,7 @@ components: format: uuid description: Identifier of the build status: - $ref: "#/components/schemas/TemplateBuildStatus" + $ref: '#/components/schemas/TemplateBuildStatus' createdAt: type: string format: date-time @@ -777,13 +777,13 @@ components: format: date-time description: Time when the build was finished cpuCount: - $ref: "#/components/schemas/CPUCount" + $ref: '#/components/schemas/CPUCount' memoryMB: - $ref: "#/components/schemas/MemoryMB" + $ref: '#/components/schemas/MemoryMB' diskSizeMB: - $ref: "#/components/schemas/DiskSizeMB" + $ref: '#/components/schemas/DiskSizeMB' envdVersion: - $ref: "#/components/schemas/EnvdVersion" + $ref: '#/components/schemas/EnvdVersion' TemplateWithBuilds: required: @@ -828,7 +828,7 @@ components: type: array description: List of builds for the template items: - $ref: "#/components/schemas/TemplateBuild" + $ref: '#/components/schemas/TemplateBuild' TemplateBuildRequest: required: @@ -850,9 +850,9 @@ components: description: Ready check command to execute in the template after the build type: string cpuCount: - $ref: "#/components/schemas/CPUCount" + $ref: '#/components/schemas/CPUCount' memoryMB: - $ref: "#/components/schemas/MemoryMB" + $ref: '#/components/schemas/MemoryMB' TemplateStep: description: Step in the template build process @@ -887,9 +887,9 @@ components: type: string description: Identifier of the team cpuCount: - $ref: "#/components/schemas/CPUCount" + $ref: '#/components/schemas/CPUCount' memoryMB: - $ref: "#/components/schemas/MemoryMB" + $ref: '#/components/schemas/MemoryMB' TemplateBuildRequestV2: required: @@ -902,21 +902,21 @@ components: type: string description: Identifier of the team cpuCount: - $ref: "#/components/schemas/CPUCount" + $ref: '#/components/schemas/CPUCount' memoryMB: - $ref: "#/components/schemas/MemoryMB" + $ref: '#/components/schemas/MemoryMB' FromImageRegistry: oneOf: - - $ref: "#/components/schemas/AWSRegistry" - - $ref: "#/components/schemas/GCPRegistry" - - $ref: "#/components/schemas/GeneralRegistry" + - $ref: '#/components/schemas/AWSRegistry' + - $ref: '#/components/schemas/GCPRegistry' + - $ref: '#/components/schemas/GeneralRegistry' discriminator: propertyName: type mapping: - aws: "#/components/schemas/AWSRegistry" - gcp: "#/components/schemas/GCPRegistry" - registry: "#/components/schemas/GeneralRegistry" + aws: '#/components/schemas/AWSRegistry' + gcp: '#/components/schemas/GCPRegistry' + registry: '#/components/schemas/GeneralRegistry' AWSRegistry: type: object @@ -982,7 +982,7 @@ components: type: string description: Template to use as a base for the template build fromImageRegistry: - $ref: "#/components/schemas/FromImageRegistry" + $ref: '#/components/schemas/FromImageRegistry' force: default: false type: boolean @@ -992,7 +992,7 @@ components: description: List of steps to execute in the template build type: array items: - $ref: "#/components/schemas/TemplateStep" + $ref: '#/components/schemas/TemplateStep' startCmd: description: Start command to execute in the template after the build type: string @@ -1034,7 +1034,7 @@ components: type: string description: Log message content level: - $ref: "#/components/schemas/LogLevel" + $ref: '#/components/schemas/LogLevel' step: type: string description: Step in the build process related to the log entry @@ -1054,7 +1054,7 @@ components: description: Log entries related to the status reason type: array items: - $ref: "#/components/schemas/BuildLogEntry" + $ref: '#/components/schemas/BuildLogEntry' TemplateBuildStatus: type: string @@ -1084,7 +1084,7 @@ components: description: Build logs structured type: array items: - $ref: "#/components/schemas/BuildLogEntry" + $ref: '#/components/schemas/BuildLogEntry' templateID: type: string description: Identifier of the template @@ -1092,9 +1092,9 @@ components: type: string description: Identifier of the build status: - $ref: "#/components/schemas/TemplateBuildStatus" + $ref: '#/components/schemas/TemplateBuildStatus' reason: - $ref: "#/components/schemas/BuildStatusReason" + $ref: '#/components/schemas/BuildStatusReason' TemplateBuildLogsResponse: required: @@ -1105,7 +1105,7 @@ components: description: Build logs structured type: array items: - $ref: "#/components/schemas/BuildLogEntry" + $ref: '#/components/schemas/BuildLogEntry' LogsDirection: type: string @@ -1150,7 +1150,7 @@ components: format: uuid description: Identifier of the cluster status: - $ref: "#/components/schemas/NodeStatus" + $ref: '#/components/schemas/NodeStatus' DiskMetrics: required: @@ -1217,7 +1217,7 @@ components: type: array description: Detailed metrics for each disk/mount point items: - $ref: "#/components/schemas/DiskMetrics" + $ref: '#/components/schemas/DiskMetrics' MachineInfo: required: - cpuFamily @@ -1274,15 +1274,15 @@ components: type: string description: Identifier of the cluster machineInfo: - $ref: "#/components/schemas/MachineInfo" + $ref: '#/components/schemas/MachineInfo' status: - $ref: "#/components/schemas/NodeStatus" + $ref: '#/components/schemas/NodeStatus' sandboxCount: type: integer format: uint32 description: Number of sandboxes running on the node metrics: - $ref: "#/components/schemas/NodeMetrics" + $ref: '#/components/schemas/NodeMetrics' createSuccesses: type: integer format: uint64 @@ -1332,16 +1332,16 @@ components: deprecated: true description: Identifier of the nomad node machineInfo: - $ref: "#/components/schemas/MachineInfo" + $ref: '#/components/schemas/MachineInfo' status: - $ref: "#/components/schemas/NodeStatus" + $ref: '#/components/schemas/NodeStatus' sandboxes: type: array description: List of sandboxes running on the node items: - $ref: "#/components/schemas/ListedSandbox" + $ref: '#/components/schemas/ListedSandbox' metrics: - $ref: "#/components/schemas/NodeMetrics" + $ref: '#/components/schemas/NodeMetrics' cachedBuilds: type: array description: List of cached builds id on the node @@ -1375,7 +1375,7 @@ components: type: string description: The fully created access token mask: - $ref: "#/components/schemas/IdentifierMaskingDetails" + $ref: '#/components/schemas/IdentifierMaskingDetails' createdAt: type: string format: date-time @@ -1404,14 +1404,14 @@ components: type: string description: Name of the API key mask: - $ref: "#/components/schemas/IdentifierMaskingDetails" + $ref: '#/components/schemas/IdentifierMaskingDetails' createdAt: type: string format: date-time description: Timestamp of API key creation createdBy: allOf: - - $ref: "#/components/schemas/TeamUser" + - $ref: '#/components/schemas/TeamUser' nullable: true lastUsed: type: string @@ -1435,7 +1435,7 @@ components: type: string description: Raw value of the API key mask: - $ref: "#/components/schemas/IdentifierMaskingDetails" + $ref: '#/components/schemas/IdentifierMaskingDetails' name: type: string description: Name of the API key @@ -1445,7 +1445,7 @@ components: description: Timestamp of API key creation createdBy: allOf: - - $ref: "#/components/schemas/TeamUser" + - $ref: '#/components/schemas/TeamUser' nullable: true lastUsed: type: string @@ -1514,10 +1514,10 @@ paths: get: description: Health check responses: - "200": + '200': description: Request was successful - "401": - $ref: "#/components/responses/401" + '401': + $ref: '#/components/responses/401' /teams: get: @@ -1527,7 +1527,7 @@ paths: - AccessTokenAuth: [] - Supabase1TokenAuth: [] responses: - "200": + '200': description: Successfully returned all teams content: application/json: @@ -1535,11 +1535,11 @@ paths: type: array items: allOf: - - $ref: "#/components/schemas/Team" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + - $ref: '#/components/schemas/Team' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /teams/{teamID}/metrics: get: @@ -1550,7 +1550,7 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/teamID" + - $ref: '#/components/parameters/teamID' - in: query name: start schema: @@ -1566,22 +1566,22 @@ paths: minimum: 0 description: Unix timestamp for the end of the interval, in seconds, for which the metrics responses: - "200": + '200': description: Successfully returned the team metrics content: application/json: schema: type: array items: - $ref: "#/components/schemas/TeamMetric" - "400": - $ref: "#/components/responses/400" - "401": - $ref: "#/components/responses/401" - "403": - $ref: "#/components/responses/403" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/TeamMetric' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '500': + $ref: '#/components/responses/500' /teams/{teamID}/metrics/max: get: @@ -1592,7 +1592,7 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/teamID" + - $ref: '#/components/parameters/teamID' - in: query name: start schema: @@ -1615,20 +1615,20 @@ paths: enum: [concurrent_sandboxes, sandbox_start_rate] description: Metric to retrieve the maximum value for responses: - "200": + '200': description: Successfully returned the team metrics content: application/json: schema: - $ref: "#/components/schemas/MaxTeamMetric" - "400": - $ref: "#/components/responses/400" - "401": - $ref: "#/components/responses/401" - "403": - $ref: "#/components/responses/403" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/MaxTeamMetric' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '500': + $ref: '#/components/responses/500' /sandboxes: get: @@ -1646,7 +1646,7 @@ paths: schema: type: string responses: - "200": + '200': description: Successfully returned all running sandboxes content: application/json: @@ -1654,13 +1654,13 @@ paths: type: array items: allOf: - - $ref: "#/components/schemas/ListedSandbox" - "401": - $ref: "#/components/responses/401" - "400": - $ref: "#/components/responses/400" - "500": - $ref: "#/components/responses/500" + - $ref: '#/components/schemas/ListedSandbox' + '401': + $ref: '#/components/responses/401' + '400': + $ref: '#/components/responses/400' + '500': + $ref: '#/components/responses/500' post: description: Create a sandbox from the template tags: [sandboxes] @@ -1673,20 +1673,20 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/NewSandbox" + $ref: '#/components/schemas/NewSandbox' responses: - "201": + '201': description: The sandbox was created successfully content: application/json: schema: - $ref: "#/components/schemas/Sandbox" - "401": - $ref: "#/components/responses/401" - "400": - $ref: "#/components/responses/400" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/Sandbox' + '401': + $ref: '#/components/responses/401' + '400': + $ref: '#/components/responses/400' + '500': + $ref: '#/components/responses/500' /v2/sandboxes: get: @@ -1710,13 +1710,13 @@ paths: schema: type: array items: - $ref: "#/components/schemas/SandboxState" + $ref: '#/components/schemas/SandboxState' style: form explode: false - - $ref: "#/components/parameters/paginationNextToken" - - $ref: "#/components/parameters/paginationLimit" + - $ref: '#/components/parameters/paginationNextToken' + - $ref: '#/components/parameters/paginationLimit' responses: - "200": + '200': description: Successfully returned all running sandboxes content: application/json: @@ -1724,13 +1724,13 @@ paths: type: array items: allOf: - - $ref: "#/components/schemas/ListedSandbox" - "401": - $ref: "#/components/responses/401" - "400": - $ref: "#/components/responses/400" - "500": - $ref: "#/components/responses/500" + - $ref: '#/components/schemas/ListedSandbox' + '401': + $ref: '#/components/responses/401' + '400': + $ref: '#/components/responses/400' + '500': + $ref: '#/components/responses/500' /sandboxes/metrics: get: @@ -1753,18 +1753,18 @@ paths: maxItems: 100 uniqueItems: true responses: - "200": + '200': description: Successfully returned all running sandboxes with metrics content: application/json: schema: - $ref: "#/components/schemas/SandboxesWithMetrics" - "401": - $ref: "#/components/responses/401" - "400": - $ref: "#/components/responses/400" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/SandboxesWithMetrics' + '401': + $ref: '#/components/responses/401' + '400': + $ref: '#/components/responses/400' + '500': + $ref: '#/components/responses/500' /sandboxes/{sandboxID}/logs: get: @@ -1775,7 +1775,7 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/sandboxID" + - $ref: '#/components/parameters/sandboxID' - in: query name: start schema: @@ -1792,18 +1792,18 @@ paths: type: integer description: Maximum number of logs that should be returned responses: - "200": + '200': description: Successfully returned the sandbox logs content: application/json: schema: - $ref: "#/components/schemas/SandboxLogs" - "404": - $ref: "#/components/responses/404" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/SandboxLogs' + '404': + $ref: '#/components/responses/404' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /sandboxes/{sandboxID}: get: @@ -1814,20 +1814,20 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/sandboxID" + - $ref: '#/components/parameters/sandboxID' responses: - "200": + '200': description: Successfully returned the sandbox content: application/json: schema: - $ref: "#/components/schemas/SandboxDetail" - "404": - $ref: "#/components/responses/404" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/SandboxDetail' + '404': + $ref: '#/components/responses/404' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' delete: description: Kill a sandbox @@ -1837,16 +1837,16 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/sandboxID" + - $ref: '#/components/parameters/sandboxID' responses: - "204": + '204': description: The sandbox was killed successfully - "404": - $ref: "#/components/responses/404" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + '404': + $ref: '#/components/responses/404' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /sandboxes/{sandboxID}/metrics: get: @@ -1857,7 +1857,7 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/sandboxID" + - $ref: '#/components/parameters/sandboxID' - in: query name: start schema: @@ -1874,22 +1874,22 @@ paths: description: Unix timestamp for the end of the interval, in seconds, for which the metrics responses: - "200": + '200': description: Successfully returned the sandbox metrics content: application/json: schema: type: array items: - $ref: "#/components/schemas/SandboxMetric" - "400": - $ref: "#/components/responses/400" - "401": - $ref: "#/components/responses/401" - "404": - $ref: "#/components/responses/404" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/SandboxMetric' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '500': + $ref: '#/components/responses/500' # TODO: Pause and resume might be exposed as POST /sandboxes/{sandboxID}/snapshot and then POST /sandboxes with specified snapshotting setup /sandboxes/{sandboxID}/pause: @@ -1901,18 +1901,18 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/sandboxID" + - $ref: '#/components/parameters/sandboxID' responses: - "204": + '204': description: The sandbox was paused successfully and can be resumed - "409": - $ref: "#/components/responses/409" - "404": - $ref: "#/components/responses/404" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + '409': + $ref: '#/components/responses/409' + '404': + $ref: '#/components/responses/404' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /sandboxes/{sandboxID}/resume: post: @@ -1924,28 +1924,28 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/sandboxID" + - $ref: '#/components/parameters/sandboxID' requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/ResumedSandbox" + $ref: '#/components/schemas/ResumedSandbox' responses: - "201": + '201': description: The sandbox was resumed successfully content: application/json: schema: - $ref: "#/components/schemas/Sandbox" - "409": - $ref: "#/components/responses/409" - "404": - $ref: "#/components/responses/404" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/Sandbox' + '409': + $ref: '#/components/responses/409' + '404': + $ref: '#/components/responses/404' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /sandboxes/{sandboxID}/connect: post: @@ -1956,34 +1956,34 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/sandboxID" + - $ref: '#/components/parameters/sandboxID' requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/ConnectSandbox" + $ref: '#/components/schemas/ConnectSandbox' responses: - "200": + '200': description: The sandbox was already running content: application/json: schema: - $ref: "#/components/schemas/Sandbox" - "201": + $ref: '#/components/schemas/Sandbox' + '201': description: The sandbox was resumed successfully content: application/json: schema: - $ref: "#/components/schemas/Sandbox" - "400": - $ref: "#/components/responses/400" - "401": - $ref: "#/components/responses/401" - "404": - $ref: "#/components/responses/404" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/Sandbox' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '500': + $ref: '#/components/responses/500' /sandboxes/{sandboxID}/timeout: post: @@ -2007,16 +2007,16 @@ paths: format: int32 minimum: 0 parameters: - - $ref: "#/components/parameters/sandboxID" + - $ref: '#/components/parameters/sandboxID' responses: - "204": + '204': description: Successfully set the sandbox timeout - "401": - $ref: "#/components/responses/401" - "404": - $ref: "#/components/responses/404" - "500": - $ref: "#/components/responses/500" + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '500': + $ref: '#/components/responses/500' /sandboxes/{sandboxID}/refreshes: post: @@ -2038,14 +2038,14 @@ paths: maximum: 3600 # 1 hour minimum: 0 parameters: - - $ref: "#/components/parameters/sandboxID" + - $ref: '#/components/parameters/sandboxID' responses: - "204": + '204': description: Successfully refreshed the sandbox - "401": - $ref: "#/components/responses/401" - "404": - $ref: "#/components/responses/404" + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' /v3/templates: post: @@ -2059,21 +2059,21 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/TemplateBuildRequestV3" + $ref: '#/components/schemas/TemplateBuildRequestV3' responses: - "202": + '202': description: The build was requested successfully content: application/json: schema: - $ref: "#/components/schemas/TemplateRequestResponseV3" - "400": - $ref: "#/components/responses/400" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/TemplateRequestResponseV3' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /v2/templates: post: @@ -2088,21 +2088,21 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/TemplateBuildRequestV2" + $ref: '#/components/schemas/TemplateBuildRequestV2' responses: - "202": + '202': description: The build was requested successfully content: application/json: schema: - $ref: "#/components/schemas/TemplateLegacy" - "400": - $ref: "#/components/responses/400" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/TemplateLegacy' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /templates/{templateID}/files/{hash}: get: @@ -2113,7 +2113,7 @@ paths: - ApiKeyAuth: [] - Supabase1TokenAuth: [] parameters: - - $ref: "#/components/parameters/templateID" + - $ref: '#/components/parameters/templateID' - in: path name: hash required: true @@ -2122,20 +2122,20 @@ paths: description: Hash of the files responses: - "201": + '201': description: The upload link where to upload the tar file content: application/json: schema: - $ref: "#/components/schemas/TemplateBuildFileUpload" - "400": - $ref: "#/components/responses/400" - "401": - $ref: "#/components/responses/401" - "404": - $ref: "#/components/responses/404" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/TemplateBuildFileUpload' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '500': + $ref: '#/components/responses/500' /templates: get: @@ -2153,7 +2153,7 @@ paths: type: string description: Identifier of the team responses: - "200": + '200': description: Successfully returned all templates content: application/json: @@ -2161,11 +2161,11 @@ paths: type: array items: allOf: - - $ref: "#/components/schemas/Template" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + - $ref: '#/components/schemas/Template' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' post: description: Create a new template deprecated: true @@ -2178,21 +2178,21 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/TemplateBuildRequest" + $ref: '#/components/schemas/TemplateBuildRequest' responses: - "202": + '202': description: The build was accepted content: application/json: schema: - $ref: "#/components/schemas/TemplateLegacy" - "400": - $ref: "#/components/responses/400" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/TemplateLegacy' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /templates/{templateID}: get: @@ -2203,20 +2203,20 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/templateID" - - $ref: "#/components/parameters/paginationNextToken" - - $ref: "#/components/parameters/paginationLimit" + - $ref: '#/components/parameters/templateID' + - $ref: '#/components/parameters/paginationNextToken' + - $ref: '#/components/parameters/paginationLimit' responses: - "200": + '200': description: Successfully returned the template with its builds content: application/json: schema: - $ref: "#/components/schemas/TemplateWithBuilds" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/TemplateWithBuilds' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' post: description: Rebuild an template deprecated: true @@ -2225,25 +2225,25 @@ paths: - AccessTokenAuth: [] - Supabase1TokenAuth: [] parameters: - - $ref: "#/components/parameters/templateID" + - $ref: '#/components/parameters/templateID' requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/TemplateBuildRequest" + $ref: '#/components/schemas/TemplateBuildRequest' responses: - "202": + '202': description: The build was accepted content: application/json: schema: - $ref: "#/components/schemas/TemplateLegacy" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/TemplateLegacy' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' delete: description: Delete a template tags: [templates] @@ -2252,14 +2252,14 @@ paths: - AccessTokenAuth: [] - Supabase1TokenAuth: [] parameters: - - $ref: "#/components/parameters/templateID" + - $ref: '#/components/parameters/templateID' responses: - "204": + '204': description: The template was deleted successfully - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' patch: description: Update template tags: [templates] @@ -2268,22 +2268,22 @@ paths: - AccessTokenAuth: [] - Supabase1TokenAuth: [] parameters: - - $ref: "#/components/parameters/templateID" + - $ref: '#/components/parameters/templateID' requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/TemplateUpdateRequest" + $ref: '#/components/schemas/TemplateUpdateRequest' responses: - "200": + '200': description: The template was updated successfully - "400": - $ref: "#/components/responses/400" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /templates/{templateID}/builds/{buildID}: post: @@ -2294,15 +2294,15 @@ paths: - AccessTokenAuth: [] - Supabase1TokenAuth: [] parameters: - - $ref: "#/components/parameters/templateID" - - $ref: "#/components/parameters/buildID" + - $ref: '#/components/parameters/templateID' + - $ref: '#/components/parameters/buildID' responses: - "202": + '202': description: The build has started - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /v2/templates/{templateID}/builds/{buildID}: post: @@ -2312,21 +2312,21 @@ paths: - ApiKeyAuth: [] - Supabase1TokenAuth: [] parameters: - - $ref: "#/components/parameters/templateID" - - $ref: "#/components/parameters/buildID" + - $ref: '#/components/parameters/templateID' + - $ref: '#/components/parameters/buildID' requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/TemplateBuildStartV2" + $ref: '#/components/schemas/TemplateBuildStartV2' responses: - "202": + '202': description: The build has started - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /templates/{templateID}/builds/{buildID}/status: get: @@ -2337,8 +2337,8 @@ paths: - ApiKeyAuth: [] - Supabase1TokenAuth: [] parameters: - - $ref: "#/components/parameters/templateID" - - $ref: "#/components/parameters/buildID" + - $ref: '#/components/parameters/templateID' + - $ref: '#/components/parameters/buildID' - in: query name: logsOffset schema: @@ -2359,20 +2359,20 @@ paths: - in: query name: level schema: - $ref: "#/components/schemas/LogLevel" + $ref: '#/components/schemas/LogLevel' responses: - "200": + '200': description: Successfully returned the template content: application/json: schema: - $ref: "#/components/schemas/TemplateBuildInfo" - "401": - $ref: "#/components/responses/401" - "404": - $ref: "#/components/responses/404" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/TemplateBuildInfo' + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '500': + $ref: '#/components/responses/500' /templates/{templateID}/builds/{buildID}/logs: get: @@ -2383,8 +2383,8 @@ paths: - ApiKeyAuth: [] - Supabase1TokenAuth: [] parameters: - - $ref: "#/components/parameters/templateID" - - $ref: "#/components/parameters/buildID" + - $ref: '#/components/parameters/templateID' + - $ref: '#/components/parameters/buildID' - in: query name: cursor schema: @@ -2404,29 +2404,29 @@ paths: - in: query name: direction schema: - $ref: "#/components/schemas/LogsDirection" + $ref: '#/components/schemas/LogsDirection' - in: query name: level schema: - $ref: "#/components/schemas/LogLevel" + $ref: '#/components/schemas/LogLevel' - in: query name: source schema: - $ref: "#/components/schemas/LogsSource" + $ref: '#/components/schemas/LogsSource' description: Source of the logs that should be returned from responses: - "200": + '200': description: Successfully returned the template build logs content: application/json: schema: - $ref: "#/components/schemas/TemplateBuildLogsResponse" - "401": - $ref: "#/components/responses/401" - "404": - $ref: "#/components/responses/404" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/TemplateBuildLogsResponse' + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '500': + $ref: '#/components/responses/500' /nodes: get: @@ -2435,7 +2435,7 @@ paths: security: - AdminTokenAuth: [] responses: - "200": + '200': description: Successfully returned all nodes content: application/json: @@ -2443,11 +2443,11 @@ paths: type: array items: allOf: - - $ref: "#/components/schemas/Node" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + - $ref: '#/components/schemas/Node' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /nodes/{nodeID}: get: @@ -2456,7 +2456,7 @@ paths: security: - AdminTokenAuth: [] parameters: - - $ref: "#/components/parameters/nodeID" + - $ref: '#/components/parameters/nodeID' - in: query name: clusterID description: Identifier of the cluster @@ -2465,39 +2465,39 @@ paths: type: string format: uuid responses: - "200": + '200': description: Successfully returned the node content: application/json: schema: - $ref: "#/components/schemas/NodeDetail" - "401": - $ref: "#/components/responses/401" - "404": - $ref: "#/components/responses/404" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/NodeDetail' + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '500': + $ref: '#/components/responses/500' post: description: Change status of a node tags: [admin] security: - AdminTokenAuth: [] parameters: - - $ref: "#/components/parameters/nodeID" + - $ref: '#/components/parameters/nodeID' requestBody: content: application/json: schema: - $ref: "#/components/schemas/NodeStatusChange" + $ref: '#/components/schemas/NodeStatusChange' responses: - "204": + '204': description: The node status was changed successfully - "401": - $ref: "#/components/responses/401" - "404": - $ref: "#/components/responses/404" - "500": - $ref: "#/components/responses/500" + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '500': + $ref: '#/components/responses/500' /admin/teams/{teamID}/sandboxes/kill: post: @@ -2515,18 +2515,18 @@ paths: format: uuid description: Team ID responses: - "200": + '200': description: Successfully killed sandboxes content: application/json: schema: - $ref: "#/components/schemas/AdminSandboxKillResult" - "401": - $ref: "#/components/responses/401" - "404": - $ref: "#/components/responses/404" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/AdminSandboxKillResult' + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '500': + $ref: '#/components/responses/500' /access-tokens: post: @@ -2539,18 +2539,18 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/NewAccessToken" + $ref: '#/components/schemas/NewAccessToken' responses: - "201": + '201': description: Access token created successfully content: application/json: schema: - $ref: "#/components/schemas/CreatedAccessToken" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/CreatedAccessToken' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /access-tokens/{accessTokenID}: delete: @@ -2559,16 +2559,16 @@ paths: security: - Supabase1TokenAuth: [] parameters: - - $ref: "#/components/parameters/accessTokenID" + - $ref: '#/components/parameters/accessTokenID' responses: - "204": + '204': description: Access token deleted successfully - "401": - $ref: "#/components/responses/401" - "404": - $ref: "#/components/responses/404" - "500": - $ref: "#/components/responses/500" + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '500': + $ref: '#/components/responses/500' /api-keys: get: @@ -2578,18 +2578,18 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] responses: - "200": + '200': description: Successfully returned all team API keys content: application/json: schema: type: array items: - $ref: "#/components/schemas/TeamAPIKey" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/TeamAPIKey' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' post: description: Create a new team API key tags: [api-keys] @@ -2601,18 +2601,18 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/NewTeamAPIKey" + $ref: '#/components/schemas/NewTeamAPIKey' responses: - "201": + '201': description: Team API key created successfully content: application/json: schema: - $ref: "#/components/schemas/CreatedTeamAPIKey" - "401": - $ref: "#/components/responses/401" - "500": - $ref: "#/components/responses/500" + $ref: '#/components/schemas/CreatedTeamAPIKey' + '401': + $ref: '#/components/responses/401' + '500': + $ref: '#/components/responses/500' /api-keys/{apiKeyID}: patch: @@ -2622,22 +2622,22 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/apiKeyID" + - $ref: '#/components/parameters/apiKeyID' requestBody: required: true content: application/json: schema: - $ref: "#/components/schemas/UpdateTeamAPIKey" + $ref: '#/components/schemas/UpdateTeamAPIKey' responses: - "200": + '200': description: Team API key updated successfully - "401": - $ref: "#/components/responses/401" - "404": - $ref: "#/components/responses/404" - "500": - $ref: "#/components/responses/500" + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '500': + $ref: '#/components/responses/500' delete: description: Delete a team API key tags: [api-keys] @@ -2645,13 +2645,13 @@ paths: - Supabase1TokenAuth: [] Supabase2TeamAuth: [] parameters: - - $ref: "#/components/parameters/apiKeyID" + - $ref: '#/components/parameters/apiKeyID' responses: - "204": + '204': description: Team API key deleted successfully - "401": - $ref: "#/components/responses/401" - "404": - $ref: "#/components/responses/404" - "500": - $ref: "#/components/responses/500" + '401': + $ref: '#/components/responses/401' + '404': + $ref: '#/components/responses/404' + '500': + $ref: '#/components/responses/500' diff --git a/src/__test__/integration/auth.test.ts b/src/__test__/integration/auth.test.ts index 5e3c6aaed..c2b4f1517 100644 --- a/src/__test__/integration/auth.test.ts +++ b/src/__test__/integration/auth.test.ts @@ -150,7 +150,6 @@ describe('Auth Actions - Integration Tests', () => { expect(result?.validationErrors?.fieldErrors.returnTo).toBeDefined() }) - it('should throw validation error if returnTo is a malicious URL', async () => { mockSupabaseClient.auth.signInWithPassword.mockResolvedValue({ data: { user: { id: 'user-123' } }, diff --git a/src/features/auth/oauth-provider-buttons.tsx b/src/features/auth/oauth-provider-buttons.tsx index 0d79fe9a9..8b67a129c 100644 --- a/src/features/auth/oauth-provider-buttons.tsx +++ b/src/features/auth/oauth-provider-buttons.tsx @@ -15,7 +15,9 @@ export function OAuthProviders() {
diff --git a/src/features/dashboard/sandbox/inspect/stopped-banner.tsx b/src/features/dashboard/sandbox/inspect/stopped-banner.tsx index 8cf049af9..f0190a77c 100644 --- a/src/features/dashboard/sandbox/inspect/stopped-banner.tsx +++ b/src/features/dashboard/sandbox/inspect/stopped-banner.tsx @@ -7,8 +7,8 @@ import { CardTitle, cardVariants, } from '@/ui/primitives/card' -import { AnimatePresence, motion } from 'motion/react' import { AlertTriangle } from 'lucide-react' +import { AnimatePresence, motion } from 'motion/react' import { useMemo } from 'react' import { useSandboxContext } from '../context' import { useLastUpdated, useWatcherError } from './hooks/use-watcher' diff --git a/src/features/dashboard/sandboxes/monitoring/header.client.tsx b/src/features/dashboard/sandboxes/monitoring/header.client.tsx index ee5badfd8..f8732771e 100644 --- a/src/features/dashboard/sandboxes/monitoring/header.client.tsx +++ b/src/features/dashboard/sandboxes/monitoring/header.client.tsx @@ -31,7 +31,7 @@ export function ConcurrentSandboxesClient({ value={lastConcurrentSandboxes} className="prose-value-big mt-1" /> - {!!(limit) && ( + {!!limit && ( LIMIT: {formatNumber(limit)} diff --git a/src/features/dashboard/settings/webhooks/add-edit-dialog-steps.tsx b/src/features/dashboard/settings/webhooks/add-edit-dialog-steps.tsx index c20d28609..b70070e42 100644 --- a/src/features/dashboard/settings/webhooks/add-edit-dialog-steps.tsx +++ b/src/features/dashboard/settings/webhooks/add-edit-dialog-steps.tsx @@ -242,9 +242,9 @@ export function WebhookAddEditDialogSteps({

This secret is used to verify webhook authenticity. Each request - includes an e2b-signature{' '} - header generated with HMAC SHA-256. Validate this in your endpoint - to ensure requests are from E2B and untampered. + includes an e2b-signature header + generated with HMAC SHA-256. Validate this in your endpoint to + ensure requests are from E2B and untampered.

; +export type webhooks = Record export interface components { - schemas: { - Error: { - /** - * Format: int32 - * @description Error code - */ - code: number; - /** @description Error */ - message: string; - }; - /** @description Sandbox event */ - SandboxEvent: { - /** - * Format: uuid - * @description Event unique identifier - */ - id: string; - /** @description Event structure version */ - version: string; - /** @description Event name */ - type: string; - /** - * @deprecated - * @description Category of the event (e.g., 'lifecycle', 'process', etc.) - */ - eventCategory?: string; - /** - * @deprecated - * @description Label for the specific event type (e.g., 'sandbox_started', 'process_oom', etc.) - */ - eventLabel?: string; - /** @description Optional JSON data associated with the event */ - eventData?: Record | null; - /** - * Format: date-time - * @description Timestamp of the event - */ - timestamp: string; - /** - * Format: string - * @description Unique identifier for the sandbox - */ - sandboxId: string; - /** - * Format: string - * @description Unique identifier for the sandbox execution - */ - sandboxExecutionId: string; - /** - * Format: string - * @description Unique identifier for the sandbox template - */ - sandboxTemplateId: string; - /** - * Format: string - * @description Unique identifier for the sandbox build - */ - sandboxBuildId: string; - /** - * Format: uuid - * @description Team identifier associated with the sandbox - */ - sandboxTeamId: string; - }; - /** @description Configuration for registering new webhooks */ - WebhookCreate: { - name: string; - /** Format: uri */ - url: string; - events: string[]; - /** @default true */ - enabled: boolean; - /** @description Secret used to sign the webhook payloads */ - signatureSecret: string; - }; - /** @description Webhook creation response */ - WebhookCreation: { - /** @description Webhook unique identifier */ - id: string; - /** @description Webhook user friendly name */ - name: string; - /** - * Format: date-time - * @description Time when the template was created - */ - createdAt: string; - /** @description Unique identifier for the team */ - teamId: string; - /** Format: uri */ - url: string; - enabled: boolean; - events: string[]; - }; - /** @description Webhook detail response */ - WebhookDetail: { - /** @description Webhook unique identifier */ - id: string; - /** @description Unique identifier for the team */ - teamId: string; - /** @description Webhook user friendly name */ - name: string; - /** - * Format: date-time - * @description Time when the template was created - */ - createdAt: string; - /** Format: uri */ - url: string; - enabled: boolean; - events: string[]; - }; - /** @description Configuration for updating existing webhooks */ - WebhookConfiguration: { - enabled?: boolean; - /** @description Webhook user friendly name */ - name?: string; - /** Format: uri */ - url?: string; - events?: string[]; - /** @description Secret used to sign the webhook payloads */ - signatureSecret?: string; - }; - }; - responses: { - /** @description Bad request */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Error"]; - }; - }; - /** @description Authentication error */ - 401: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Error"]; - }; - }; - /** @description Not found */ - 404: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Error"]; - }; - }; - /** @description Conflict */ - 409: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Error"]; - }; - }; - /** @description Server error */ - 500: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Error"]; - }; - }; - }; - parameters: { - sandboxID: string; - webhookID: string; - }; - requestBodies: never; - headers: never; - pathItems: never; + schemas: { + Error: { + /** + * Format: int32 + * @description Error code + */ + code: number + /** @description Error */ + message: string + } + /** @description Sandbox event */ + SandboxEvent: { + /** + * Format: uuid + * @description Event unique identifier + */ + id: string + /** @description Event structure version */ + version: string + /** @description Event name */ + type: string + /** + * @deprecated + * @description Category of the event (e.g., 'lifecycle', 'process', etc.) + */ + eventCategory?: string + /** + * @deprecated + * @description Label for the specific event type (e.g., 'sandbox_started', 'process_oom', etc.) + */ + eventLabel?: string + /** @description Optional JSON data associated with the event */ + eventData?: Record | null + /** + * Format: date-time + * @description Timestamp of the event + */ + timestamp: string + /** + * Format: string + * @description Unique identifier for the sandbox + */ + sandboxId: string + /** + * Format: string + * @description Unique identifier for the sandbox execution + */ + sandboxExecutionId: string + /** + * Format: string + * @description Unique identifier for the sandbox template + */ + sandboxTemplateId: string + /** + * Format: string + * @description Unique identifier for the sandbox build + */ + sandboxBuildId: string + /** + * Format: uuid + * @description Team identifier associated with the sandbox + */ + sandboxTeamId: string + } + /** @description Configuration for registering new webhooks */ + WebhookCreate: { + name: string + /** Format: uri */ + url: string + events: string[] + /** @default true */ + enabled: boolean + /** @description Secret used to sign the webhook payloads */ + signatureSecret: string + } + /** @description Webhook creation response */ + WebhookCreation: { + /** @description Webhook unique identifier */ + id: string + /** @description Webhook user friendly name */ + name: string + /** + * Format: date-time + * @description Time when the template was created + */ + createdAt: string + /** @description Unique identifier for the team */ + teamId: string + /** Format: uri */ + url: string + enabled: boolean + events: string[] + } + /** @description Webhook detail response */ + WebhookDetail: { + /** @description Webhook unique identifier */ + id: string + /** @description Unique identifier for the team */ + teamId: string + /** @description Webhook user friendly name */ + name: string + /** + * Format: date-time + * @description Time when the template was created + */ + createdAt: string + /** Format: uri */ + url: string + enabled: boolean + events: string[] + } + /** @description Configuration for updating existing webhooks */ + WebhookConfiguration: { + enabled?: boolean + /** @description Webhook user friendly name */ + name?: string + /** Format: uri */ + url?: string + events?: string[] + /** @description Secret used to sign the webhook payloads */ + signatureSecret?: string + } + } + responses: { + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Error'] + } + } + /** @description Authentication error */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Error'] + } + } + /** @description Not found */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Error'] + } + } + /** @description Conflict */ + 409: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Error'] + } + } + /** @description Server error */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Error'] + } + } + } + parameters: { + sandboxID: string + webhookID: string + } + requestBodies: never + headers: never + pathItems: never } -export type $defs = Record; +export type $defs = Record export interface operations { - webhooksList: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description List of registered webhooks. */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["WebhookDetail"][]; - }; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - webhookCreate: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["WebhookCreate"]; - }; - }; - responses: { - /** @description Successfully created webhook. */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["WebhookCreation"]; - }; - }; - 400: components["responses"]["400"]; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - webhookGet: { - parameters: { - query?: never; - header?: never; - path: { - webhookID: components["parameters"]["webhookID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned the webhook configuration. */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["WebhookDetail"]; - }; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - webhookDelete: { - parameters: { - query?: never; - header?: never; - path: { - webhookID: components["parameters"]["webhookID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully deleted webhook. */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - webhookUpdate: { - parameters: { - query?: never; - header?: never; - path: { - webhookID: components["parameters"]["webhookID"]; - }; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["WebhookConfiguration"]; - }; - }; - responses: { - /** @description Successfully updated webhook. */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["WebhookDetail"]; - }; - }; - 400: components["responses"]["400"]; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; + webhooksList: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description List of registered webhooks. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['WebhookDetail'][] + } + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + webhookCreate: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['WebhookCreate'] + } + } + responses: { + /** @description Successfully created webhook. */ + 201: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['WebhookCreation'] + } + } + 400: components['responses']['400'] + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + webhookGet: { + parameters: { + query?: never + header?: never + path: { + webhookID: components['parameters']['webhookID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned the webhook configuration. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['WebhookDetail'] + } + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + webhookDelete: { + parameters: { + query?: never + header?: never + path: { + webhookID: components['parameters']['webhookID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully deleted webhook. */ + 200: { + headers: { + [name: string]: unknown + } + content?: never + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + webhookUpdate: { + parameters: { + query?: never + header?: never + path: { + webhookID: components['parameters']['webhookID'] + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['WebhookConfiguration'] + } + } + responses: { + /** @description Successfully updated webhook. */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['WebhookDetail'] + } + } + 400: components['responses']['400'] + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } } diff --git a/src/types/database.types.ts b/src/types/database.types.ts index fa2c34974..e843a29f3 100644 --- a/src/types/database.types.ts +++ b/src/types/database.types.ts @@ -10,7 +10,7 @@ export type Database = { // Allows to automatically instantiate createClient with right options // instead of createClient(URL, KEY) __InternalSupabase: { - PostgrestVersion: "10.2.0 (e07807d)" + PostgrestVersion: '10.2.0 (e07807d)' } public: { Tables: { @@ -71,11 +71,11 @@ export type Database = { } Relationships: [ { - foreignKeyName: "access_tokens_users_access_tokens" - columns: ["user_id"] + foreignKeyName: 'access_tokens_users_access_tokens' + columns: ['user_id'] isOneToOne: false - referencedRelation: "auth_users" - referencedColumns: ["id"] + referencedRelation: 'auth_users' + referencedColumns: ['id'] }, ] } @@ -127,25 +127,25 @@ export type Database = { } Relationships: [ { - foreignKeyName: "addons_teams_addons" - columns: ["team_id"] + foreignKeyName: 'addons_teams_addons' + columns: ['team_id'] isOneToOne: false - referencedRelation: "team_limits" - referencedColumns: ["id"] + referencedRelation: 'team_limits' + referencedColumns: ['id'] }, { - foreignKeyName: "addons_teams_addons" - columns: ["team_id"] + foreignKeyName: 'addons_teams_addons' + columns: ['team_id'] isOneToOne: false - referencedRelation: "teams" - referencedColumns: ["id"] + referencedRelation: 'teams' + referencedColumns: ['id'] }, { - foreignKeyName: "addons_users_addons" - columns: ["added_by"] + foreignKeyName: 'addons_users_addons' + columns: ['added_by'] isOneToOne: false - referencedRelation: "auth_users" - referencedColumns: ["id"] + referencedRelation: 'auth_users' + referencedColumns: ['id'] }, ] } @@ -191,11 +191,11 @@ export type Database = { } Relationships: [ { - foreignKeyName: "env_aliases_envs_env_aliases" - columns: ["env_id"] + foreignKeyName: 'env_aliases_envs_env_aliases' + columns: ['env_id'] isOneToOne: false - referencedRelation: "envs" - referencedColumns: ["id"] + referencedRelation: 'envs' + referencedColumns: ['id'] }, ] } @@ -265,11 +265,11 @@ export type Database = { } Relationships: [ { - foreignKeyName: "env_builds_envs_builds" - columns: ["env_id"] + foreignKeyName: 'env_builds_envs_builds' + columns: ['env_id'] isOneToOne: false - referencedRelation: "envs" - referencedColumns: ["id"] + referencedRelation: 'envs' + referencedColumns: ['id'] }, ] } @@ -288,11 +288,11 @@ export type Database = { } Relationships: [ { - foreignKeyName: "env_defaults_env_id_fkey" - columns: ["env_id"] + foreignKeyName: 'env_defaults_env_id_fkey' + columns: ['env_id'] isOneToOne: true - referencedRelation: "envs" - referencedColumns: ["id"] + referencedRelation: 'envs' + referencedColumns: ['id'] }, ] } @@ -335,32 +335,32 @@ export type Database = { } Relationships: [ { - foreignKeyName: "envs_cluster_id_fkey" - columns: ["cluster_id"] + foreignKeyName: 'envs_cluster_id_fkey' + columns: ['cluster_id'] isOneToOne: false - referencedRelation: "clusters" - referencedColumns: ["id"] + referencedRelation: 'clusters' + referencedColumns: ['id'] }, { - foreignKeyName: "envs_teams_envs" - columns: ["team_id"] + foreignKeyName: 'envs_teams_envs' + columns: ['team_id'] isOneToOne: false - referencedRelation: "team_limits" - referencedColumns: ["id"] + referencedRelation: 'team_limits' + referencedColumns: ['id'] }, { - foreignKeyName: "envs_teams_envs" - columns: ["team_id"] + foreignKeyName: 'envs_teams_envs' + columns: ['team_id'] isOneToOne: false - referencedRelation: "teams" - referencedColumns: ["id"] + referencedRelation: 'teams' + referencedColumns: ['id'] }, { - foreignKeyName: "envs_users_created_envs" - columns: ["created_by"] + foreignKeyName: 'envs_users_created_envs' + columns: ['created_by'] isOneToOne: false - referencedRelation: "auth_users" - referencedColumns: ["id"] + referencedRelation: 'auth_users' + referencedColumns: ['id'] }, ] } @@ -388,11 +388,11 @@ export type Database = { } Relationships: [ { - foreignKeyName: "feedback_user_id_fkey" - columns: ["user_id"] + foreignKeyName: 'feedback_user_id_fkey' + columns: ['user_id'] isOneToOne: false - referencedRelation: "auth_users" - referencedColumns: ["id"] + referencedRelation: 'auth_users' + referencedColumns: ['id'] }, ] } @@ -441,32 +441,32 @@ export type Database = { } Relationships: [ { - foreignKeyName: "fk_snapshots_team" - columns: ["team_id"] + foreignKeyName: 'fk_snapshots_team' + columns: ['team_id'] isOneToOne: false - referencedRelation: "team_limits" - referencedColumns: ["id"] + referencedRelation: 'team_limits' + referencedColumns: ['id'] }, { - foreignKeyName: "fk_snapshots_team" - columns: ["team_id"] + foreignKeyName: 'fk_snapshots_team' + columns: ['team_id'] isOneToOne: false - referencedRelation: "teams" - referencedColumns: ["id"] + referencedRelation: 'teams' + referencedColumns: ['id'] }, { - foreignKeyName: "snapshots_envs_base_env_id" - columns: ["base_env_id"] + foreignKeyName: 'snapshots_envs_base_env_id' + columns: ['base_env_id'] isOneToOne: false - referencedRelation: "envs" - referencedColumns: ["id"] + referencedRelation: 'envs' + referencedColumns: ['id'] }, { - foreignKeyName: "snapshots_envs_env_id" - columns: ["env_id"] + foreignKeyName: 'snapshots_envs_env_id' + columns: ['env_id'] isOneToOne: false - referencedRelation: "envs" - referencedColumns: ["id"] + referencedRelation: 'envs' + referencedColumns: ['id'] }, ] } @@ -515,25 +515,25 @@ export type Database = { } Relationships: [ { - foreignKeyName: "team_api_keys_teams_team_api_keys" - columns: ["team_id"] + foreignKeyName: 'team_api_keys_teams_team_api_keys' + columns: ['team_id'] isOneToOne: false - referencedRelation: "team_limits" - referencedColumns: ["id"] + referencedRelation: 'team_limits' + referencedColumns: ['id'] }, { - foreignKeyName: "team_api_keys_teams_team_api_keys" - columns: ["team_id"] + foreignKeyName: 'team_api_keys_teams_team_api_keys' + columns: ['team_id'] isOneToOne: false - referencedRelation: "teams" - referencedColumns: ["id"] + referencedRelation: 'teams' + referencedColumns: ['id'] }, { - foreignKeyName: "team_api_keys_users_created_api_keys" - columns: ["created_by"] + foreignKeyName: 'team_api_keys_users_created_api_keys' + columns: ['created_by'] isOneToOne: false - referencedRelation: "auth_users" - referencedColumns: ["id"] + referencedRelation: 'auth_users' + referencedColumns: ['id'] }, ] } @@ -582,18 +582,18 @@ export type Database = { } Relationships: [ { - foreignKeyName: "teams_cluster_id_fkey" - columns: ["cluster_id"] + foreignKeyName: 'teams_cluster_id_fkey' + columns: ['cluster_id'] isOneToOne: false - referencedRelation: "clusters" - referencedColumns: ["id"] + referencedRelation: 'clusters' + referencedColumns: ['id'] }, { - foreignKeyName: "teams_tiers_teams" - columns: ["tier"] + foreignKeyName: 'teams_tiers_teams' + columns: ['tier'] isOneToOne: false - referencedRelation: "tiers" - referencedColumns: ["id"] + referencedRelation: 'tiers' + referencedColumns: ['id'] }, ] } @@ -657,32 +657,32 @@ export type Database = { } Relationships: [ { - foreignKeyName: "users_teams_added_by_user" - columns: ["added_by"] + foreignKeyName: 'users_teams_added_by_user' + columns: ['added_by'] isOneToOne: false - referencedRelation: "auth_users" - referencedColumns: ["id"] + referencedRelation: 'auth_users' + referencedColumns: ['id'] }, { - foreignKeyName: "users_teams_teams_teams" - columns: ["team_id"] + foreignKeyName: 'users_teams_teams_teams' + columns: ['team_id'] isOneToOne: false - referencedRelation: "team_limits" - referencedColumns: ["id"] + referencedRelation: 'team_limits' + referencedColumns: ['id'] }, { - foreignKeyName: "users_teams_teams_teams" - columns: ["team_id"] + foreignKeyName: 'users_teams_teams_teams' + columns: ['team_id'] isOneToOne: false - referencedRelation: "teams" - referencedColumns: ["id"] + referencedRelation: 'teams' + referencedColumns: ['id'] }, { - foreignKeyName: "users_teams_users_users" - columns: ["user_id"] + foreignKeyName: 'users_teams_users_users' + columns: ['user_id'] isOneToOne: false - referencedRelation: "auth_users" - referencedColumns: ["id"] + referencedRelation: 'auth_users' + referencedColumns: ['id'] }, ] } @@ -735,10 +735,10 @@ export type Database = { Returns: boolean } temp_create_access_token: { Args: never; Returns: string } - unaccent: { Args: { "": string }; Returns: string } + unaccent: { Args: { '': string }; Returns: string } } Enums: { - deployment_state: "generating" | "deploying" | "finished" | "error" + deployment_state: 'generating' | 'deploying' | 'finished' | 'error' } CompositeTypes: { [_ in never]: never @@ -746,33 +746,33 @@ export type Database = { } } -type DatabaseWithoutInternals = Omit +type DatabaseWithoutInternals = Omit -type DefaultSchema = DatabaseWithoutInternals[Extract] +type DefaultSchema = DatabaseWithoutInternals[Extract] export type Tables< DefaultSchemaTableNameOrOptions extends - | keyof (DefaultSchema["Tables"] & DefaultSchema["Views"]) + | keyof (DefaultSchema['Tables'] & DefaultSchema['Views']) | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & - DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"]) + ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Views']) : never = never, > = DefaultSchemaTableNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] & - DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends { + ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] & + DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Views'])[TableName] extends { Row: infer R } ? R : never - : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema["Tables"] & - DefaultSchema["Views"]) - ? (DefaultSchema["Tables"] & - DefaultSchema["Views"])[DefaultSchemaTableNameOrOptions] extends { + : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema['Tables'] & + DefaultSchema['Views']) + ? (DefaultSchema['Tables'] & + DefaultSchema['Views'])[DefaultSchemaTableNameOrOptions] extends { Row: infer R } ? R @@ -781,23 +781,23 @@ export type Tables< export type TablesInsert< DefaultSchemaTableNameOrOptions extends - | keyof DefaultSchema["Tables"] + | keyof DefaultSchema['Tables'] | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] : never = never, > = DefaultSchemaTableNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'][TableName] extends { Insert: infer I } ? I : never - : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] - ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { + : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema['Tables'] + ? DefaultSchema['Tables'][DefaultSchemaTableNameOrOptions] extends { Insert: infer I } ? I @@ -806,23 +806,23 @@ export type TablesInsert< export type TablesUpdate< DefaultSchemaTableNameOrOptions extends - | keyof DefaultSchema["Tables"] + | keyof DefaultSchema['Tables'] | { schema: keyof DatabaseWithoutInternals }, TableName extends DefaultSchemaTableNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] + ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'] : never = never, > = DefaultSchemaTableNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends { + ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions['schema']]['Tables'][TableName] extends { Update: infer U } ? U : never - : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"] - ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends { + : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema['Tables'] + ? DefaultSchema['Tables'][DefaultSchemaTableNameOrOptions] extends { Update: infer U } ? U @@ -831,42 +831,42 @@ export type TablesUpdate< export type Enums< DefaultSchemaEnumNameOrOptions extends - | keyof DefaultSchema["Enums"] + | keyof DefaultSchema['Enums'] | { schema: keyof DatabaseWithoutInternals }, EnumName extends DefaultSchemaEnumNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"] + ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions['schema']]['Enums'] : never = never, > = DefaultSchemaEnumNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName] - : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"] - ? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions] + ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions['schema']]['Enums'][EnumName] + : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema['Enums'] + ? DefaultSchema['Enums'][DefaultSchemaEnumNameOrOptions] : never export type CompositeTypes< PublicCompositeTypeNameOrOptions extends - | keyof DefaultSchema["CompositeTypes"] + | keyof DefaultSchema['CompositeTypes'] | { schema: keyof DatabaseWithoutInternals }, CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] + ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions['schema']]['CompositeTypes'] : never = never, > = PublicCompositeTypeNameOrOptions extends { schema: keyof DatabaseWithoutInternals } - ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] - : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"] - ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] + ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions['schema']]['CompositeTypes'][CompositeTypeName] + : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema['CompositeTypes'] + ? DefaultSchema['CompositeTypes'][PublicCompositeTypeNameOrOptions] : never export const Constants = { public: { Enums: { - deployment_state: ["generating", "deploying", "finished", "error"], + deployment_state: ['generating', 'deploying', 'finished', 'error'], }, }, } as const diff --git a/src/types/infra-api.types.ts b/src/types/infra-api.types.ts index c86ee374f..aa72e8ae2 100644 --- a/src/types/infra-api.types.ts +++ b/src/types/infra-api.types.ts @@ -4,2562 +4,2565 @@ */ export interface paths { - "/health": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description Health check */ - get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Request was successful */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - 401: components["responses"]["401"]; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/teams": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description List all teams */ - get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned all teams */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Team"][]; - }; - }; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/teams/{teamID}/metrics": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description Get metrics for the team */ - get: { - parameters: { - query?: { - /** @description Unix timestamp for the start of the interval, in seconds, for which the metrics */ - start?: number; - end?: number; - }; - header?: never; - path: { - teamID: components["parameters"]["teamID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned the team metrics */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["TeamMetric"][]; - }; - }; - 400: components["responses"]["400"]; - 401: components["responses"]["401"]; - 403: components["responses"]["403"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/teams/{teamID}/metrics/max": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description Get the maximum metrics for the team in the given interval */ - get: { - parameters: { - query: { - /** @description Unix timestamp for the start of the interval, in seconds, for which the metrics */ - start?: number; - end?: number; - /** @description Metric to retrieve the maximum value for */ - metric: "concurrent_sandboxes" | "sandbox_start_rate"; - }; - header?: never; - path: { - teamID: components["parameters"]["teamID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned the team metrics */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["MaxTeamMetric"]; - }; - }; - 400: components["responses"]["400"]; - 401: components["responses"]["401"]; - 403: components["responses"]["403"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/sandboxes": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description List all running sandboxes */ - get: { - parameters: { - query?: { - /** @description Metadata query used to filter the sandboxes (e.g. "user=abc&app=prod"). Each key and values must be URL encoded. */ - metadata?: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned all running sandboxes */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ListedSandbox"][]; - }; - }; - 400: components["responses"]["400"]; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - /** @description Create a sandbox from the template */ - post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["NewSandbox"]; - }; - }; - responses: { - /** @description The sandbox was created successfully */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Sandbox"]; - }; - }; - 400: components["responses"]["400"]; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/v2/sandboxes": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description List all sandboxes */ - get: { - parameters: { - query?: { - /** @description Metadata query used to filter the sandboxes (e.g. "user=abc&app=prod"). Each key and values must be URL encoded. */ - metadata?: string; - /** @description Filter sandboxes by one or more states */ - state?: components["schemas"]["SandboxState"][]; - /** @description Cursor to start the list from */ - nextToken?: components["parameters"]["paginationNextToken"]; - /** @description Maximum number of items to return per page */ - limit?: components["parameters"]["paginationLimit"]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned all running sandboxes */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ListedSandbox"][]; - }; - }; - 400: components["responses"]["400"]; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/sandboxes/metrics": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description List metrics for given sandboxes */ - get: { - parameters: { - query: { - /** @description Comma-separated list of sandbox IDs to get metrics for */ - sandbox_ids: string[]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned all running sandboxes with metrics */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["SandboxesWithMetrics"]; - }; - }; - 400: components["responses"]["400"]; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/sandboxes/{sandboxID}/logs": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description Get sandbox logs */ - get: { - parameters: { - query?: { - /** @description Starting timestamp of the logs that should be returned in milliseconds */ - start?: number; - /** @description Maximum number of logs that should be returned */ - limit?: number; - }; - header?: never; - path: { - sandboxID: components["parameters"]["sandboxID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned the sandbox logs */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["SandboxLogs"]; - }; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/sandboxes/{sandboxID}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description Get a sandbox by id */ - get: { - parameters: { - query?: never; - header?: never; - path: { - sandboxID: components["parameters"]["sandboxID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned the sandbox */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["SandboxDetail"]; - }; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - post?: never; - /** @description Kill a sandbox */ - delete: { - parameters: { - query?: never; - header?: never; - path: { - sandboxID: components["parameters"]["sandboxID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description The sandbox was killed successfully */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/sandboxes/{sandboxID}/metrics": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description Get sandbox metrics */ - get: { - parameters: { - query?: { - /** @description Unix timestamp for the start of the interval, in seconds, for which the metrics */ - start?: number; - end?: number; - }; - header?: never; - path: { - sandboxID: components["parameters"]["sandboxID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned the sandbox metrics */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["SandboxMetric"][]; - }; - }; - 400: components["responses"]["400"]; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/sandboxes/{sandboxID}/pause": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** @description Pause the sandbox */ - post: { - parameters: { - query?: never; - header?: never; - path: { - sandboxID: components["parameters"]["sandboxID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description The sandbox was paused successfully and can be resumed */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 409: components["responses"]["409"]; - 500: components["responses"]["500"]; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/sandboxes/{sandboxID}/resume": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** - * @deprecated - * @description Resume the sandbox - */ - post: { - parameters: { - query?: never; - header?: never; - path: { - sandboxID: components["parameters"]["sandboxID"]; - }; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["ResumedSandbox"]; - }; - }; - responses: { - /** @description The sandbox was resumed successfully */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Sandbox"]; - }; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 409: components["responses"]["409"]; - 500: components["responses"]["500"]; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/sandboxes/{sandboxID}/connect": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** @description Returns sandbox details. If the sandbox is paused, it will be resumed. TTL is only extended. */ - post: { - parameters: { - query?: never; - header?: never; - path: { - sandboxID: components["parameters"]["sandboxID"]; - }; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["ConnectSandbox"]; - }; - }; - responses: { - /** @description The sandbox was already running */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Sandbox"]; - }; - }; - /** @description The sandbox was resumed successfully */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Sandbox"]; - }; - }; - 400: components["responses"]["400"]; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/sandboxes/{sandboxID}/timeout": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** @description Set the timeout for the sandbox. The sandbox will expire x seconds from the time of the request. Calling this method multiple times overwrites the TTL, each time using the current timestamp as the starting point to measure the timeout duration. */ - post: { - parameters: { - query?: never; - header?: never; - path: { - sandboxID: components["parameters"]["sandboxID"]; - }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** - * Format: int32 - * @description Timeout in seconds from the current time after which the sandbox should expire - */ - timeout: number; - }; - }; - }; - responses: { - /** @description Successfully set the sandbox timeout */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/sandboxes/{sandboxID}/refreshes": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** @description Refresh the sandbox extending its time to live */ - post: { - parameters: { - query?: never; - header?: never; - path: { - sandboxID: components["parameters"]["sandboxID"]; - }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** @description Duration for which the sandbox should be kept alive in seconds */ - duration?: number; - }; - }; - }; - responses: { - /** @description Successfully refreshed the sandbox */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/v3/templates": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** @description Create a new template */ - post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["TemplateBuildRequestV3"]; - }; - }; - responses: { - /** @description The build was requested successfully */ - 202: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["TemplateRequestResponseV3"]; - }; - }; - 400: components["responses"]["400"]; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/v2/templates": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** - * @deprecated - * @description Create a new template - */ - post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["TemplateBuildRequestV2"]; - }; - }; - responses: { - /** @description The build was requested successfully */ - 202: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["TemplateLegacy"]; - }; - }; - 400: components["responses"]["400"]; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/templates/{templateID}/files/{hash}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description Get an upload link for a tar file containing build layer files */ - get: { - parameters: { - query?: never; - header?: never; - path: { - templateID: components["parameters"]["templateID"]; - hash: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description The upload link where to upload the tar file */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["TemplateBuildFileUpload"]; - }; - }; - 400: components["responses"]["400"]; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/templates": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description List all templates */ - get: { - parameters: { - query?: { - teamID?: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned all templates */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Template"][]; - }; - }; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - /** - * @deprecated - * @description Create a new template - */ - post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["TemplateBuildRequest"]; - }; - }; - responses: { - /** @description The build was accepted */ - 202: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["TemplateLegacy"]; - }; - }; - 400: components["responses"]["400"]; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/templates/{templateID}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description List all builds for a template */ - get: { - parameters: { - query?: { - /** @description Cursor to start the list from */ - nextToken?: components["parameters"]["paginationNextToken"]; - /** @description Maximum number of items to return per page */ - limit?: components["parameters"]["paginationLimit"]; - }; - header?: never; - path: { - templateID: components["parameters"]["templateID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned the template with its builds */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["TemplateWithBuilds"]; - }; - }; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - /** - * @deprecated - * @description Rebuild an template - */ - post: { - parameters: { - query?: never; - header?: never; - path: { - templateID: components["parameters"]["templateID"]; - }; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["TemplateBuildRequest"]; - }; - }; - responses: { - /** @description The build was accepted */ - 202: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["TemplateLegacy"]; - }; - }; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - /** @description Delete a template */ - delete: { - parameters: { - query?: never; - header?: never; - path: { - templateID: components["parameters"]["templateID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description The template was deleted successfully */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - options?: never; - head?: never; - /** @description Update template */ - patch: { - parameters: { - query?: never; - header?: never; - path: { - templateID: components["parameters"]["templateID"]; - }; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["TemplateUpdateRequest"]; - }; - }; - responses: { - /** @description The template was updated successfully */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - 400: components["responses"]["400"]; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - trace?: never; - }; - "/templates/{templateID}/builds/{buildID}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** - * @deprecated - * @description Start the build - */ - post: { - parameters: { - query?: never; - header?: never; - path: { - templateID: components["parameters"]["templateID"]; - buildID: components["parameters"]["buildID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description The build has started */ - 202: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/v2/templates/{templateID}/builds/{buildID}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** @description Start the build */ - post: { - parameters: { - query?: never; - header?: never; - path: { - templateID: components["parameters"]["templateID"]; - buildID: components["parameters"]["buildID"]; - }; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["TemplateBuildStartV2"]; - }; - }; - responses: { - /** @description The build has started */ - 202: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/templates/{templateID}/builds/{buildID}/status": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description Get template build info */ - get: { - parameters: { - query?: { - /** @description Index of the starting build log that should be returned with the template */ - logsOffset?: number; - /** @description Maximum number of logs that should be returned */ - limit?: number; - level?: components["schemas"]["LogLevel"]; - }; - header?: never; - path: { - templateID: components["parameters"]["templateID"]; - buildID: components["parameters"]["buildID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned the template */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["TemplateBuildInfo"]; - }; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/templates/{templateID}/builds/{buildID}/logs": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description Get template build logs */ - get: { - parameters: { - query?: { - /** @description Starting timestamp of the logs that should be returned in milliseconds */ - cursor?: number; - /** @description Maximum number of logs that should be returned */ - limit?: number; - direction?: components["schemas"]["LogsDirection"]; - level?: components["schemas"]["LogLevel"]; - /** @description Source of the logs that should be returned from */ - source?: components["schemas"]["LogsSource"]; - }; - header?: never; - path: { - templateID: components["parameters"]["templateID"]; - buildID: components["parameters"]["buildID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned the template build logs */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["TemplateBuildLogsResponse"]; - }; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/nodes": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description List all nodes */ - get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned all nodes */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Node"][]; - }; - }; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/nodes/{nodeID}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description Get node info */ - get: { - parameters: { - query?: { - /** @description Identifier of the cluster */ - clusterID?: string; - }; - header?: never; - path: { - nodeID: components["parameters"]["nodeID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned the node */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["NodeDetail"]; - }; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - /** @description Change status of a node */ - post: { - parameters: { - query?: never; - header?: never; - path: { - nodeID: components["parameters"]["nodeID"]; - }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": components["schemas"]["NodeStatusChange"]; - }; - }; - responses: { - /** @description The node status was changed successfully */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/admin/teams/{teamID}/sandboxes/kill": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** - * Kill all sandboxes for a team - * @description Kills all sandboxes for the specified team - */ - post: { - parameters: { - query?: never; - header?: never; - path: { - /** @description Team ID */ - teamID: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully killed sandboxes */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["AdminSandboxKillResult"]; - }; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/access-tokens": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** @description Create a new access token */ - post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["NewAccessToken"]; - }; - }; - responses: { - /** @description Access token created successfully */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["CreatedAccessToken"]; - }; - }; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/access-tokens/{accessTokenID}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post?: never; - /** @description Delete an access token */ - delete: { - parameters: { - query?: never; - header?: never; - path: { - accessTokenID: components["parameters"]["accessTokenID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Access token deleted successfully */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api-keys": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** @description List all team API keys */ - get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully returned all team API keys */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["TeamAPIKey"][]; - }; - }; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - put?: never; - /** @description Create a new team API key */ - post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["NewTeamAPIKey"]; - }; - }; - responses: { - /** @description Team API key created successfully */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["CreatedTeamAPIKey"]; - }; - }; - 401: components["responses"]["401"]; - 500: components["responses"]["500"]; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api-keys/{apiKeyID}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post?: never; - /** @description Delete a team API key */ - delete: { - parameters: { - query?: never; - header?: never; - path: { - apiKeyID: components["parameters"]["apiKeyID"]; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Team API key deleted successfully */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - options?: never; - head?: never; - /** @description Update a team API key */ - patch: { - parameters: { - query?: never; - header?: never; - path: { - apiKeyID: components["parameters"]["apiKeyID"]; - }; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["UpdateTeamAPIKey"]; - }; - }; - responses: { - /** @description Team API key updated successfully */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - 401: components["responses"]["401"]; - 404: components["responses"]["404"]; - 500: components["responses"]["500"]; - }; - }; - trace?: never; - }; -} -export type webhooks = Record; -export interface components { - schemas: { - Team: { - /** @description Identifier of the team */ - teamID: string; - /** @description Name of the team */ - name: string; - /** @description API key for the team */ - apiKey: string; - /** @description Whether the team is the default team */ - isDefault: boolean; - }; - TeamUser: { - /** - * Format: uuid - * @description Identifier of the user - */ - id: string; - /** @description Email of the user */ - email: string; - }; - TemplateUpdateRequest: { - /** @description Whether the template is public or only accessible by the team */ - public?: boolean; - }; - /** - * Format: int32 - * @description CPU cores for the sandbox - */ - CPUCount: number; - /** - * Format: int32 - * @description Memory for the sandbox in MiB - */ - MemoryMB: number; - /** - * Format: int32 - * @description Disk size for the sandbox in MiB - */ - DiskSizeMB: number; - /** @description Version of the envd running in the sandbox */ - EnvdVersion: string; - SandboxMetadata: { - [key: string]: string; - }; - /** - * @description State of the sandbox - * @enum {string} - */ - SandboxState: "running" | "paused"; - EnvVars: { - [key: string]: string; - }; - /** @description MCP configuration for the sandbox */ - Mcp: { - [key: string]: unknown; - } | null; - SandboxNetworkConfig: { - /** - * @description Specify if the sandbox URLs should be accessible only with authentication. - * @default true - */ - allowPublicTraffic: boolean; - /** @description List of allowed CIDR blocks or IP addresses for egress traffic. Allowed addresses always take precedence over blocked addresses. */ - allowOut?: string[]; - /** @description List of denied CIDR blocks or IP addresses for egress traffic */ - denyOut?: string[]; - /** @description Specify host mask which will be used for all sandbox requests */ - maskRequestHost?: string; - }; - /** @description Log entry with timestamp and line */ - SandboxLog: { - /** - * Format: date-time - * @description Timestamp of the log entry - */ - timestamp: string; - /** @description Log line content */ - line: string; - }; - SandboxLogEntry: { - /** - * Format: date-time - * @description Timestamp of the log entry - */ - timestamp: string; - /** @description Log message content */ - message: string; - level: components["schemas"]["LogLevel"]; - fields: { - [key: string]: string; - }; - }; - SandboxLogs: { - /** @description Logs of the sandbox */ - logs: components["schemas"]["SandboxLog"][]; - /** @description Structured logs of the sandbox */ - logEntries: components["schemas"]["SandboxLogEntry"][]; - }; - /** @description Metric entry with timestamp and line */ - SandboxMetric: { - /** - * Format: date-time - * @deprecated - * @description Timestamp of the metric entry - */ - timestamp: string; - /** - * Format: int64 - * @description Timestamp of the metric entry in Unix time (seconds since epoch) - */ - timestampUnix: number; - /** - * Format: int32 - * @description Number of CPU cores - */ - cpuCount: number; - /** - * Format: float - * @description CPU usage percentage - */ - cpuUsedPct: number; - /** - * Format: int64 - * @description Memory used in bytes - */ - memUsed: number; - /** - * Format: int64 - * @description Total memory in bytes - */ - memTotal: number; - /** - * Format: int64 - * @description Disk used in bytes - */ - diskUsed: number; - /** - * Format: int64 - * @description Total disk space in bytes - */ - diskTotal: number; - }; - Sandbox: { - /** @description Identifier of the template from which is the sandbox created */ - templateID: string; - /** @description Identifier of the sandbox */ - sandboxID: string; - /** @description Alias of the template */ - alias?: string; - /** - * @deprecated - * @description Identifier of the client - */ - clientID: string; - envdVersion: components["schemas"]["EnvdVersion"]; - /** @description Access token used for envd communication */ - envdAccessToken?: string; - /** @description Token required for accessing sandbox via proxy. */ - trafficAccessToken?: string | null; - /** @description Base domain where the sandbox traffic is accessible */ - domain?: string | null; - }; - SandboxDetail: { - /** @description Identifier of the template from which is the sandbox created */ - templateID: string; - /** @description Alias of the template */ - alias?: string; - /** @description Identifier of the sandbox */ - sandboxID: string; - /** - * @deprecated - * @description Identifier of the client - */ - clientID: string; - /** - * Format: date-time - * @description Time when the sandbox was started - */ - startedAt: string; - /** - * Format: date-time - * @description Time when the sandbox will expire - */ - endAt: string; - envdVersion: components["schemas"]["EnvdVersion"]; - /** @description Access token used for envd communication */ - envdAccessToken?: string; - /** @description Base domain where the sandbox traffic is accessible */ - domain?: string | null; - cpuCount: components["schemas"]["CPUCount"]; - memoryMB: components["schemas"]["MemoryMB"]; - diskSizeMB: components["schemas"]["DiskSizeMB"]; - metadata?: components["schemas"]["SandboxMetadata"]; - state: components["schemas"]["SandboxState"]; - }; - ListedSandbox: { - /** @description Identifier of the template from which is the sandbox created */ - templateID: string; - /** @description Alias of the template */ - alias?: string; - /** @description Identifier of the sandbox */ - sandboxID: string; - /** - * @deprecated - * @description Identifier of the client - */ - clientID: string; - /** - * Format: date-time - * @description Time when the sandbox was started - */ - startedAt: string; - /** - * Format: date-time - * @description Time when the sandbox will expire - */ - endAt: string; - cpuCount: components["schemas"]["CPUCount"]; - memoryMB: components["schemas"]["MemoryMB"]; - diskSizeMB: components["schemas"]["DiskSizeMB"]; - metadata?: components["schemas"]["SandboxMetadata"]; - state: components["schemas"]["SandboxState"]; - envdVersion: components["schemas"]["EnvdVersion"]; - }; - SandboxesWithMetrics: { - sandboxes: { - [key: string]: components["schemas"]["SandboxMetric"]; - }; - }; - NewSandbox: { - /** @description Identifier of the required template */ - templateID: string; - /** - * Format: int32 - * @description Time to live for the sandbox in seconds. - * @default 15 - */ - timeout: number; - /** - * @description Automatically pauses the sandbox after the timeout - * @default false - */ - autoPause: boolean; - /** @description Secure all system communication with sandbox */ - secure?: boolean; - /** @description Allow sandbox to access the internet. When set to false, it behaves the same as specifying denyOut to 0.0.0.0/0 in the network config. */ - allow_internet_access?: boolean; - network?: components["schemas"]["SandboxNetworkConfig"]; - metadata?: components["schemas"]["SandboxMetadata"]; - envVars?: components["schemas"]["EnvVars"]; - mcp?: components["schemas"]["Mcp"]; - }; - ResumedSandbox: { - /** - * Format: int32 - * @description Time to live for the sandbox in seconds. - * @default 15 - */ - timeout: number; - /** - * @deprecated - * @description Automatically pauses the sandbox after the timeout - */ - autoPause?: boolean; - }; - ConnectSandbox: { + '/health': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description Health check */ + get: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description Request was successful */ + 200: { + headers: { + [name: string]: unknown + } + content?: never + } + 401: components['responses']['401'] + } + } + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/teams': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description List all teams */ + get: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned all teams */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Team'][] + } + } + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/teams/{teamID}/metrics': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description Get metrics for the team */ + get: { + parameters: { + query?: { + /** @description Unix timestamp for the start of the interval, in seconds, for which the metrics */ + start?: number + end?: number + } + header?: never + path: { + teamID: components['parameters']['teamID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned the team metrics */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['TeamMetric'][] + } + } + 400: components['responses']['400'] + 401: components['responses']['401'] + 403: components['responses']['403'] + 500: components['responses']['500'] + } + } + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/teams/{teamID}/metrics/max': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description Get the maximum metrics for the team in the given interval */ + get: { + parameters: { + query: { + /** @description Unix timestamp for the start of the interval, in seconds, for which the metrics */ + start?: number + end?: number + /** @description Metric to retrieve the maximum value for */ + metric: 'concurrent_sandboxes' | 'sandbox_start_rate' + } + header?: never + path: { + teamID: components['parameters']['teamID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned the team metrics */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['MaxTeamMetric'] + } + } + 400: components['responses']['400'] + 401: components['responses']['401'] + 403: components['responses']['403'] + 500: components['responses']['500'] + } + } + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/sandboxes': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description List all running sandboxes */ + get: { + parameters: { + query?: { + /** @description Metadata query used to filter the sandboxes (e.g. "user=abc&app=prod"). Each key and values must be URL encoded. */ + metadata?: string + } + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned all running sandboxes */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['ListedSandbox'][] + } + } + 400: components['responses']['400'] + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + put?: never + /** @description Create a sandbox from the template */ + post: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['NewSandbox'] + } + } + responses: { + /** @description The sandbox was created successfully */ + 201: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Sandbox'] + } + } + 400: components['responses']['400'] + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/v2/sandboxes': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description List all sandboxes */ + get: { + parameters: { + query?: { + /** @description Metadata query used to filter the sandboxes (e.g. "user=abc&app=prod"). Each key and values must be URL encoded. */ + metadata?: string + /** @description Filter sandboxes by one or more states */ + state?: components['schemas']['SandboxState'][] + /** @description Cursor to start the list from */ + nextToken?: components['parameters']['paginationNextToken'] + /** @description Maximum number of items to return per page */ + limit?: components['parameters']['paginationLimit'] + } + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned all running sandboxes */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['ListedSandbox'][] + } + } + 400: components['responses']['400'] + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/sandboxes/metrics': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description List metrics for given sandboxes */ + get: { + parameters: { + query: { + /** @description Comma-separated list of sandbox IDs to get metrics for */ + sandbox_ids: string[] + } + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned all running sandboxes with metrics */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['SandboxesWithMetrics'] + } + } + 400: components['responses']['400'] + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/sandboxes/{sandboxID}/logs': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description Get sandbox logs */ + get: { + parameters: { + query?: { + /** @description Starting timestamp of the logs that should be returned in milliseconds */ + start?: number + /** @description Maximum number of logs that should be returned */ + limit?: number + } + header?: never + path: { + sandboxID: components['parameters']['sandboxID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned the sandbox logs */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['SandboxLogs'] + } + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/sandboxes/{sandboxID}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description Get a sandbox by id */ + get: { + parameters: { + query?: never + header?: never + path: { + sandboxID: components['parameters']['sandboxID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned the sandbox */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['SandboxDetail'] + } + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + put?: never + post?: never + /** @description Kill a sandbox */ + delete: { + parameters: { + query?: never + header?: never + path: { + sandboxID: components['parameters']['sandboxID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The sandbox was killed successfully */ + 204: { + headers: { + [name: string]: unknown + } + content?: never + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + options?: never + head?: never + patch?: never + trace?: never + } + '/sandboxes/{sandboxID}/metrics': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description Get sandbox metrics */ + get: { + parameters: { + query?: { + /** @description Unix timestamp for the start of the interval, in seconds, for which the metrics */ + start?: number + end?: number + } + header?: never + path: { + sandboxID: components['parameters']['sandboxID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned the sandbox metrics */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['SandboxMetric'][] + } + } + 400: components['responses']['400'] + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/sandboxes/{sandboxID}/pause': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** @description Pause the sandbox */ + post: { + parameters: { + query?: never + header?: never + path: { + sandboxID: components['parameters']['sandboxID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The sandbox was paused successfully and can be resumed */ + 204: { + headers: { + [name: string]: unknown + } + content?: never + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 409: components['responses']['409'] + 500: components['responses']['500'] + } + } + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/sandboxes/{sandboxID}/resume': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** + * @deprecated + * @description Resume the sandbox + */ + post: { + parameters: { + query?: never + header?: never + path: { + sandboxID: components['parameters']['sandboxID'] + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['ResumedSandbox'] + } + } + responses: { + /** @description The sandbox was resumed successfully */ + 201: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Sandbox'] + } + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 409: components['responses']['409'] + 500: components['responses']['500'] + } + } + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/sandboxes/{sandboxID}/connect': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** @description Returns sandbox details. If the sandbox is paused, it will be resumed. TTL is only extended. */ + post: { + parameters: { + query?: never + header?: never + path: { + sandboxID: components['parameters']['sandboxID'] + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['ConnectSandbox'] + } + } + responses: { + /** @description The sandbox was already running */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Sandbox'] + } + } + /** @description The sandbox was resumed successfully */ + 201: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Sandbox'] + } + } + 400: components['responses']['400'] + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/sandboxes/{sandboxID}/timeout': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** @description Set the timeout for the sandbox. The sandbox will expire x seconds from the time of the request. Calling this method multiple times overwrites the TTL, each time using the current timestamp as the starting point to measure the timeout duration. */ + post: { + parameters: { + query?: never + header?: never + path: { + sandboxID: components['parameters']['sandboxID'] + } + cookie?: never + } + requestBody?: { + content: { + 'application/json': { /** * Format: int32 * @description Timeout in seconds from the current time after which the sandbox should expire */ - timeout: number; - }; - /** @description Team metric with timestamp */ - TeamMetric: { - /** - * Format: date-time - * @deprecated - * @description Timestamp of the metric entry - */ - timestamp: string; - /** - * Format: int64 - * @description Timestamp of the metric entry in Unix time (seconds since epoch) - */ - timestampUnix: number; - /** - * Format: int32 - * @description The number of concurrent sandboxes for the team - */ - concurrentSandboxes: number; - /** - * Format: float - * @description Number of sandboxes started per second - */ - sandboxStartRate: number; - }; - /** @description Team metric with timestamp */ - MaxTeamMetric: { - /** - * Format: date-time - * @deprecated - * @description Timestamp of the metric entry - */ - timestamp: string; - /** - * Format: int64 - * @description Timestamp of the metric entry in Unix time (seconds since epoch) - */ - timestampUnix: number; - /** @description The maximum value of the requested metric in the given interval */ - value: number; - }; - AdminSandboxKillResult: { - /** @description Number of sandboxes successfully killed */ - killedCount: number; - /** @description Number of sandboxes that failed to kill */ - failedCount: number; - }; - Template: { - /** @description Identifier of the template */ - templateID: string; - /** @description Identifier of the last successful build for given template */ - buildID: string; - cpuCount: components["schemas"]["CPUCount"]; - memoryMB: components["schemas"]["MemoryMB"]; - diskSizeMB: components["schemas"]["DiskSizeMB"]; - /** @description Whether the template is public or only accessible by the team */ - public: boolean; - /** @description Aliases of the template */ - aliases: string[]; - /** - * Format: date-time - * @description Time when the template was created - */ - createdAt: string; - /** - * Format: date-time - * @description Time when the template was last updated - */ - updatedAt: string; - createdBy: components["schemas"]["TeamUser"] | null; - /** - * Format: date-time - * @description Time when the template was last used - */ - lastSpawnedAt: string | null; - /** - * Format: int64 - * @description Number of times the template was used - */ - spawnCount: number; - /** - * Format: int32 - * @description Number of times the template was built - */ - buildCount: number; - envdVersion: components["schemas"]["EnvdVersion"]; - buildStatus: components["schemas"]["TemplateBuildStatus"]; - }; - TemplateRequestResponseV3: { - /** @description Identifier of the template */ - templateID: string; - /** @description Identifier of the last successful build for given template */ - buildID: string; - /** @description Whether the template is public or only accessible by the team */ - public: boolean; - /** @description Aliases of the template */ - aliases: string[]; - }; - TemplateLegacy: { - /** @description Identifier of the template */ - templateID: string; - /** @description Identifier of the last successful build for given template */ - buildID: string; - cpuCount: components["schemas"]["CPUCount"]; - memoryMB: components["schemas"]["MemoryMB"]; - diskSizeMB: components["schemas"]["DiskSizeMB"]; - /** @description Whether the template is public or only accessible by the team */ - public: boolean; - /** @description Aliases of the template */ - aliases: string[]; - /** - * Format: date-time - * @description Time when the template was created - */ - createdAt: string; - /** - * Format: date-time - * @description Time when the template was last updated - */ - updatedAt: string; - createdBy: components["schemas"]["TeamUser"] | null; - /** - * Format: date-time - * @description Time when the template was last used - */ - lastSpawnedAt: string | null; - /** - * Format: int64 - * @description Number of times the template was used - */ - spawnCount: number; - /** - * Format: int32 - * @description Number of times the template was built - */ - buildCount: number; - envdVersion: components["schemas"]["EnvdVersion"]; - }; - TemplateBuild: { - /** - * Format: uuid - * @description Identifier of the build - */ - buildID: string; - status: components["schemas"]["TemplateBuildStatus"]; - /** - * Format: date-time - * @description Time when the build was created - */ - createdAt: string; - /** - * Format: date-time - * @description Time when the build was last updated - */ - updatedAt: string; - /** - * Format: date-time - * @description Time when the build was finished - */ - finishedAt?: string; - cpuCount: components["schemas"]["CPUCount"]; - memoryMB: components["schemas"]["MemoryMB"]; - diskSizeMB?: components["schemas"]["DiskSizeMB"]; - envdVersion?: components["schemas"]["EnvdVersion"]; - }; - TemplateWithBuilds: { - /** @description Identifier of the template */ - templateID: string; - /** @description Whether the template is public or only accessible by the team */ - public: boolean; - /** @description Aliases of the template */ - aliases: string[]; - /** - * Format: date-time - * @description Time when the template was created - */ - createdAt: string; - /** - * Format: date-time - * @description Time when the template was last updated - */ - updatedAt: string; - /** - * Format: date-time - * @description Time when the template was last used - */ - lastSpawnedAt: string | null; - /** - * Format: int64 - * @description Number of times the template was used - */ - spawnCount: number; - /** @description List of builds for the template */ - builds: components["schemas"]["TemplateBuild"][]; - }; - TemplateBuildRequest: { - /** @description Alias of the template */ - alias?: string; - /** @description Dockerfile for the template */ - dockerfile: string; - /** @description Identifier of the team */ - teamID?: string; - /** @description Start command to execute in the template after the build */ - startCmd?: string; - /** @description Ready check command to execute in the template after the build */ - readyCmd?: string; - cpuCount?: components["schemas"]["CPUCount"]; - memoryMB?: components["schemas"]["MemoryMB"]; - }; - /** @description Step in the template build process */ - TemplateStep: { - /** @description Type of the step */ - type: string; - /** - * @description Arguments for the step - * @default [] - */ - args: string[]; - /** @description Hash of the files used in the step */ - filesHash?: string; - /** - * @description Whether the step should be forced to run regardless of the cache - * @default false - */ - force: boolean; - }; - TemplateBuildRequestV3: { - /** @description Alias of the template */ - alias: string; - /** @description Identifier of the team */ - teamID?: string; - cpuCount?: components["schemas"]["CPUCount"]; - memoryMB?: components["schemas"]["MemoryMB"]; - }; - TemplateBuildRequestV2: { - /** @description Alias of the template */ - alias: string; - /** @description Identifier of the team */ - teamID?: string; - cpuCount?: components["schemas"]["CPUCount"]; - memoryMB?: components["schemas"]["MemoryMB"]; - }; - FromImageRegistry: components["schemas"]["AWSRegistry"] | components["schemas"]["GCPRegistry"] | components["schemas"]["GeneralRegistry"]; - AWSRegistry: { - /** - * @description Type of registry authentication (enum property replaced by openapi-typescript) - * @enum {string} - */ - type: "aws"; - /** @description AWS Access Key ID for ECR authentication */ - awsAccessKeyId: string; - /** @description AWS Secret Access Key for ECR authentication */ - awsSecretAccessKey: string; - /** @description AWS Region where the ECR registry is located */ - awsRegion: string; - }; - GCPRegistry: { - /** - * @description Type of registry authentication (enum property replaced by openapi-typescript) - * @enum {string} - */ - type: "gcp"; - /** @description Service Account JSON for GCP authentication */ - serviceAccountJson: string; - }; - GeneralRegistry: { - /** - * @description Type of registry authentication (enum property replaced by openapi-typescript) - * @enum {string} - */ - type: "registry"; - /** @description Username to use for the registry */ - username: string; - /** @description Password to use for the registry */ - password: string; - }; - TemplateBuildStartV2: { - /** @description Image to use as a base for the template build */ - fromImage?: string; - /** @description Template to use as a base for the template build */ - fromTemplate?: string; - fromImageRegistry?: components["schemas"]["FromImageRegistry"]; - /** - * @description Whether the whole build should be forced to run regardless of the cache - * @default false - */ - force: boolean; - /** - * @description List of steps to execute in the template build - * @default [] - */ - steps: components["schemas"]["TemplateStep"][]; - /** @description Start command to execute in the template after the build */ - startCmd?: string; - /** @description Ready check command to execute in the template after the build */ - readyCmd?: string; - }; - TemplateBuildFileUpload: { - /** @description Whether the file is already present in the cache */ - present: boolean; - /** @description Url where the file should be uploaded to */ - url?: string; - }; - /** - * @description State of the sandbox - * @enum {string} - */ - LogLevel: "debug" | "info" | "warn" | "error"; - BuildLogEntry: { - /** - * Format: date-time - * @description Timestamp of the log entry - */ - timestamp: string; - /** @description Log message content */ - message: string; - level: components["schemas"]["LogLevel"]; - /** @description Step in the build process related to the log entry */ - step?: string; - }; - BuildStatusReason: { - /** @description Message with the status reason, currently reporting only for error status */ - message: string; - /** @description Step that failed */ - step?: string; - /** - * @description Log entries related to the status reason - * @default [] - */ - logEntries: components["schemas"]["BuildLogEntry"][]; - }; - /** - * @description Status of the template build - * @enum {string} - */ - TemplateBuildStatus: "building" | "waiting" | "ready" | "error"; - TemplateBuildInfo: { - /** - * @description Build logs - * @default [] - */ - logs: string[]; - /** - * @description Build logs structured - * @default [] - */ - logEntries: components["schemas"]["BuildLogEntry"][]; - /** @description Identifier of the template */ - templateID: string; - /** @description Identifier of the build */ - buildID: string; - status: components["schemas"]["TemplateBuildStatus"]; - reason?: components["schemas"]["BuildStatusReason"]; - }; - TemplateBuildLogsResponse: { - /** - * @description Build logs structured - * @default [] - */ - logs: components["schemas"]["BuildLogEntry"][]; - }; - /** - * @description Direction of the logs that should be returned - * @enum {string} - */ - LogsDirection: "forward" | "backward"; - /** - * @description Source of the logs that should be returned - * @enum {string} - */ - LogsSource: "temporary" | "persistent"; - /** - * @description Status of the node - * @enum {string} - */ - NodeStatus: "ready" | "draining" | "connecting" | "unhealthy"; - NodeStatusChange: { - /** - * Format: uuid - * @description Identifier of the cluster - */ - clusterID?: string; - status: components["schemas"]["NodeStatus"]; - }; - DiskMetrics: { - /** @description Mount point of the disk */ - mountPoint: string; - /** @description Device name */ - device: string; - /** @description Filesystem type (e.g., ext4, xfs) */ - filesystemType: string; - /** - * Format: uint64 - * @description Used space in bytes - */ - usedBytes: number; - /** - * Format: uint64 - * @description Total space in bytes - */ - totalBytes: number; - }; - /** @description Node metrics */ - NodeMetrics: { - /** - * Format: uint32 - * @description Number of allocated CPU cores - */ - allocatedCPU: number; - /** - * Format: uint32 - * @description Node CPU usage percentage - */ - cpuPercent: number; - /** - * Format: uint32 - * @description Total number of CPU cores on the node - */ - cpuCount: number; - /** - * Format: uint64 - * @description Amount of allocated memory in bytes - */ - allocatedMemoryBytes: number; - /** - * Format: uint64 - * @description Node memory used in bytes - */ - memoryUsedBytes: number; - /** - * Format: uint64 - * @description Total node memory in bytes - */ - memoryTotalBytes: number; - /** @description Detailed metrics for each disk/mount point */ - disks: components["schemas"]["DiskMetrics"][]; - }; - MachineInfo: { - /** @description CPU family of the node */ - cpuFamily: string; - /** @description CPU model of the node */ - cpuModel: string; - /** @description CPU model name of the node */ - cpuModelName: string; - /** @description CPU architecture of the node */ - cpuArchitecture: string; - }; - Node: { - /** @description Version of the orchestrator */ - version: string; - /** @description Commit of the orchestrator */ - commit: string; - /** - * @deprecated - * @description Identifier of the nomad node - */ - nodeID: string; - /** @description Identifier of the node */ - id: string; - /** @description Service instance identifier of the node */ - serviceInstanceID: string; - /** @description Identifier of the cluster */ - clusterID: string; - machineInfo: components["schemas"]["MachineInfo"]; - status: components["schemas"]["NodeStatus"]; - /** - * Format: uint32 - * @description Number of sandboxes running on the node - */ - sandboxCount: number; - metrics: components["schemas"]["NodeMetrics"]; - /** - * Format: uint64 - * @description Number of sandbox create successes - */ - createSuccesses: number; - /** - * Format: uint64 - * @description Number of sandbox create fails - */ - createFails: number; - /** - * Format: int - * @description Number of starting Sandboxes - */ - sandboxStartingCount: number; - }; - NodeDetail: { - /** @description Identifier of the cluster */ - clusterID: string; - /** @description Version of the orchestrator */ - version: string; - /** @description Commit of the orchestrator */ - commit: string; - /** @description Identifier of the node */ - id: string; - /** @description Service instance identifier of the node */ - serviceInstanceID: string; - /** - * @deprecated - * @description Identifier of the nomad node - */ - nodeID: string; - machineInfo: components["schemas"]["MachineInfo"]; - status: components["schemas"]["NodeStatus"]; - /** @description List of sandboxes running on the node */ - sandboxes: components["schemas"]["ListedSandbox"][]; - metrics: components["schemas"]["NodeMetrics"]; - /** @description List of cached builds id on the node */ - cachedBuilds: string[]; - /** - * Format: uint64 - * @description Number of sandbox create successes - */ - createSuccesses: number; - /** - * Format: uint64 - * @description Number of sandbox create fails - */ - createFails: number; - }; - CreatedAccessToken: { - /** - * Format: uuid - * @description Identifier of the access token - */ - id: string; - /** @description Name of the access token */ - name: string; - /** @description The fully created access token */ - token: string; - mask: components["schemas"]["IdentifierMaskingDetails"]; - /** - * Format: date-time - * @description Timestamp of access token creation - */ - createdAt: string; - }; - NewAccessToken: { - /** @description Name of the access token */ - name: string; - }; - TeamAPIKey: { - /** - * Format: uuid - * @description Identifier of the API key - */ - id: string; - /** @description Name of the API key */ - name: string; - mask: components["schemas"]["IdentifierMaskingDetails"]; - /** - * Format: date-time - * @description Timestamp of API key creation - */ - createdAt: string; - createdBy?: components["schemas"]["TeamUser"] | null; - /** - * Format: date-time - * @description Last time this API key was used - */ - lastUsed?: string | null; - }; - CreatedTeamAPIKey: { - /** - * Format: uuid - * @description Identifier of the API key - */ - id: string; - /** @description Raw value of the API key */ - key: string; - mask: components["schemas"]["IdentifierMaskingDetails"]; - /** @description Name of the API key */ - name: string; - /** - * Format: date-time - * @description Timestamp of API key creation - */ - createdAt: string; - createdBy?: components["schemas"]["TeamUser"] | null; - /** - * Format: date-time - * @description Last time this API key was used - */ - lastUsed?: string | null; - }; - NewTeamAPIKey: { - /** @description Name of the API key */ - name: string; - }; - UpdateTeamAPIKey: { - /** @description New name for the API key */ - name: string; - }; - Error: { - /** - * Format: int32 - * @description Error code - */ - code: number; - /** @description Error */ - message: string; - }; - IdentifierMaskingDetails: { - /** @description Prefix that identifies the token or key type */ - prefix: string; - /** @description Length of the token or key */ - valueLength: number; - /** @description Prefix used in masked version of the token or key */ - maskedValuePrefix: string; - /** @description Suffix used in masked version of the token or key */ - maskedValueSuffix: string; - }; - }; - responses: { - /** @description Bad request */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Error"]; - }; - }; - /** @description Authentication error */ - 401: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Error"]; - }; - }; - /** @description Forbidden */ - 403: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Error"]; - }; - }; - /** @description Not found */ - 404: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Error"]; - }; - }; - /** @description Conflict */ - 409: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Error"]; - }; - }; - /** @description Server error */ - 500: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Error"]; - }; - }; - }; + timeout: number + } + } + } + responses: { + /** @description Successfully set the sandbox timeout */ + 204: { + headers: { + [name: string]: unknown + } + content?: never + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/sandboxes/{sandboxID}/refreshes': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** @description Refresh the sandbox extending its time to live */ + post: { + parameters: { + query?: never + header?: never + path: { + sandboxID: components['parameters']['sandboxID'] + } + cookie?: never + } + requestBody?: { + content: { + 'application/json': { + /** @description Duration for which the sandbox should be kept alive in seconds */ + duration?: number + } + } + } + responses: { + /** @description Successfully refreshed the sandbox */ + 204: { + headers: { + [name: string]: unknown + } + content?: never + } + 401: components['responses']['401'] + 404: components['responses']['404'] + } + } + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/v3/templates': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** @description Create a new template */ + post: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['TemplateBuildRequestV3'] + } + } + responses: { + /** @description The build was requested successfully */ + 202: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['TemplateRequestResponseV3'] + } + } + 400: components['responses']['400'] + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/v2/templates': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** + * @deprecated + * @description Create a new template + */ + post: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['TemplateBuildRequestV2'] + } + } + responses: { + /** @description The build was requested successfully */ + 202: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['TemplateLegacy'] + } + } + 400: components['responses']['400'] + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/templates/{templateID}/files/{hash}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description Get an upload link for a tar file containing build layer files */ + get: { + parameters: { + query?: never + header?: never + path: { + templateID: components['parameters']['templateID'] + hash: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The upload link where to upload the tar file */ + 201: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['TemplateBuildFileUpload'] + } + } + 400: components['responses']['400'] + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/templates': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description List all templates */ + get: { + parameters: { + query?: { + teamID?: string + } + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned all templates */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Template'][] + } + } + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + put?: never + /** + * @deprecated + * @description Create a new template + */ + post: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['TemplateBuildRequest'] + } + } + responses: { + /** @description The build was accepted */ + 202: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['TemplateLegacy'] + } + } + 400: components['responses']['400'] + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/templates/{templateID}': { parameters: { - templateID: string; - buildID: string; - sandboxID: string; - teamID: string; - nodeID: string; - apiKeyID: string; - accessTokenID: string; - /** @description Maximum number of items to return per page */ - paginationLimit: number; - /** @description Cursor to start the list from */ - paginationNextToken: string; - }; - requestBodies: never; - headers: never; - pathItems: never; + query?: never + header?: never + path?: never + cookie?: never + } + /** @description List all builds for a template */ + get: { + parameters: { + query?: { + /** @description Cursor to start the list from */ + nextToken?: components['parameters']['paginationNextToken'] + /** @description Maximum number of items to return per page */ + limit?: components['parameters']['paginationLimit'] + } + header?: never + path: { + templateID: components['parameters']['templateID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned the template with its builds */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['TemplateWithBuilds'] + } + } + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + put?: never + /** + * @deprecated + * @description Rebuild an template + */ + post: { + parameters: { + query?: never + header?: never + path: { + templateID: components['parameters']['templateID'] + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['TemplateBuildRequest'] + } + } + responses: { + /** @description The build was accepted */ + 202: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['TemplateLegacy'] + } + } + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + /** @description Delete a template */ + delete: { + parameters: { + query?: never + header?: never + path: { + templateID: components['parameters']['templateID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The template was deleted successfully */ + 204: { + headers: { + [name: string]: unknown + } + content?: never + } + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + options?: never + head?: never + /** @description Update template */ + patch: { + parameters: { + query?: never + header?: never + path: { + templateID: components['parameters']['templateID'] + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['TemplateUpdateRequest'] + } + } + responses: { + /** @description The template was updated successfully */ + 200: { + headers: { + [name: string]: unknown + } + content?: never + } + 400: components['responses']['400'] + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + trace?: never + } + '/templates/{templateID}/builds/{buildID}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** + * @deprecated + * @description Start the build + */ + post: { + parameters: { + query?: never + header?: never + path: { + templateID: components['parameters']['templateID'] + buildID: components['parameters']['buildID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description The build has started */ + 202: { + headers: { + [name: string]: unknown + } + content?: never + } + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/v2/templates/{templateID}/builds/{buildID}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** @description Start the build */ + post: { + parameters: { + query?: never + header?: never + path: { + templateID: components['parameters']['templateID'] + buildID: components['parameters']['buildID'] + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['TemplateBuildStartV2'] + } + } + responses: { + /** @description The build has started */ + 202: { + headers: { + [name: string]: unknown + } + content?: never + } + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/templates/{templateID}/builds/{buildID}/status': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description Get template build info */ + get: { + parameters: { + query?: { + /** @description Index of the starting build log that should be returned with the template */ + logsOffset?: number + /** @description Maximum number of logs that should be returned */ + limit?: number + level?: components['schemas']['LogLevel'] + } + header?: never + path: { + templateID: components['parameters']['templateID'] + buildID: components['parameters']['buildID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned the template */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['TemplateBuildInfo'] + } + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/templates/{templateID}/builds/{buildID}/logs': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description Get template build logs */ + get: { + parameters: { + query?: { + /** @description Starting timestamp of the logs that should be returned in milliseconds */ + cursor?: number + /** @description Maximum number of logs that should be returned */ + limit?: number + direction?: components['schemas']['LogsDirection'] + level?: components['schemas']['LogLevel'] + /** @description Source of the logs that should be returned from */ + source?: components['schemas']['LogsSource'] + } + header?: never + path: { + templateID: components['parameters']['templateID'] + buildID: components['parameters']['buildID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned the template build logs */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['TemplateBuildLogsResponse'] + } + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/nodes': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description List all nodes */ + get: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned all nodes */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Node'][] + } + } + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + put?: never + post?: never + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/nodes/{nodeID}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description Get node info */ + get: { + parameters: { + query?: { + /** @description Identifier of the cluster */ + clusterID?: string + } + header?: never + path: { + nodeID: components['parameters']['nodeID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned the node */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['NodeDetail'] + } + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + put?: never + /** @description Change status of a node */ + post: { + parameters: { + query?: never + header?: never + path: { + nodeID: components['parameters']['nodeID'] + } + cookie?: never + } + requestBody?: { + content: { + 'application/json': components['schemas']['NodeStatusChange'] + } + } + responses: { + /** @description The node status was changed successfully */ + 204: { + headers: { + [name: string]: unknown + } + content?: never + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/admin/teams/{teamID}/sandboxes/kill': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** + * Kill all sandboxes for a team + * @description Kills all sandboxes for the specified team + */ + post: { + parameters: { + query?: never + header?: never + path: { + /** @description Team ID */ + teamID: string + } + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully killed sandboxes */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['AdminSandboxKillResult'] + } + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/access-tokens': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + /** @description Create a new access token */ + post: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['NewAccessToken'] + } + } + responses: { + /** @description Access token created successfully */ + 201: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['CreatedAccessToken'] + } + } + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/access-tokens/{accessTokenID}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + post?: never + /** @description Delete an access token */ + delete: { + parameters: { + query?: never + header?: never + path: { + accessTokenID: components['parameters']['accessTokenID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description Access token deleted successfully */ + 204: { + headers: { + [name: string]: unknown + } + content?: never + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + options?: never + head?: never + patch?: never + trace?: never + } + '/api-keys': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + /** @description List all team API keys */ + get: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody?: never + responses: { + /** @description Successfully returned all team API keys */ + 200: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['TeamAPIKey'][] + } + } + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + put?: never + /** @description Create a new team API key */ + post: { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['NewTeamAPIKey'] + } + } + responses: { + /** @description Team API key created successfully */ + 201: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['CreatedTeamAPIKey'] + } + } + 401: components['responses']['401'] + 500: components['responses']['500'] + } + } + delete?: never + options?: never + head?: never + patch?: never + trace?: never + } + '/api-keys/{apiKeyID}': { + parameters: { + query?: never + header?: never + path?: never + cookie?: never + } + get?: never + put?: never + post?: never + /** @description Delete a team API key */ + delete: { + parameters: { + query?: never + header?: never + path: { + apiKeyID: components['parameters']['apiKeyID'] + } + cookie?: never + } + requestBody?: never + responses: { + /** @description Team API key deleted successfully */ + 204: { + headers: { + [name: string]: unknown + } + content?: never + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + options?: never + head?: never + /** @description Update a team API key */ + patch: { + parameters: { + query?: never + header?: never + path: { + apiKeyID: components['parameters']['apiKeyID'] + } + cookie?: never + } + requestBody: { + content: { + 'application/json': components['schemas']['UpdateTeamAPIKey'] + } + } + responses: { + /** @description Team API key updated successfully */ + 200: { + headers: { + [name: string]: unknown + } + content?: never + } + 401: components['responses']['401'] + 404: components['responses']['404'] + 500: components['responses']['500'] + } + } + trace?: never + } +} +export type webhooks = Record +export interface components { + schemas: { + Team: { + /** @description Identifier of the team */ + teamID: string + /** @description Name of the team */ + name: string + /** @description API key for the team */ + apiKey: string + /** @description Whether the team is the default team */ + isDefault: boolean + } + TeamUser: { + /** + * Format: uuid + * @description Identifier of the user + */ + id: string + /** @description Email of the user */ + email: string + } + TemplateUpdateRequest: { + /** @description Whether the template is public or only accessible by the team */ + public?: boolean + } + /** + * Format: int32 + * @description CPU cores for the sandbox + */ + CPUCount: number + /** + * Format: int32 + * @description Memory for the sandbox in MiB + */ + MemoryMB: number + /** + * Format: int32 + * @description Disk size for the sandbox in MiB + */ + DiskSizeMB: number + /** @description Version of the envd running in the sandbox */ + EnvdVersion: string + SandboxMetadata: { + [key: string]: string + } + /** + * @description State of the sandbox + * @enum {string} + */ + SandboxState: 'running' | 'paused' + EnvVars: { + [key: string]: string + } + /** @description MCP configuration for the sandbox */ + Mcp: { + [key: string]: unknown + } | null + SandboxNetworkConfig: { + /** + * @description Specify if the sandbox URLs should be accessible only with authentication. + * @default true + */ + allowPublicTraffic: boolean + /** @description List of allowed CIDR blocks or IP addresses for egress traffic. Allowed addresses always take precedence over blocked addresses. */ + allowOut?: string[] + /** @description List of denied CIDR blocks or IP addresses for egress traffic */ + denyOut?: string[] + /** @description Specify host mask which will be used for all sandbox requests */ + maskRequestHost?: string + } + /** @description Log entry with timestamp and line */ + SandboxLog: { + /** + * Format: date-time + * @description Timestamp of the log entry + */ + timestamp: string + /** @description Log line content */ + line: string + } + SandboxLogEntry: { + /** + * Format: date-time + * @description Timestamp of the log entry + */ + timestamp: string + /** @description Log message content */ + message: string + level: components['schemas']['LogLevel'] + fields: { + [key: string]: string + } + } + SandboxLogs: { + /** @description Logs of the sandbox */ + logs: components['schemas']['SandboxLog'][] + /** @description Structured logs of the sandbox */ + logEntries: components['schemas']['SandboxLogEntry'][] + } + /** @description Metric entry with timestamp and line */ + SandboxMetric: { + /** + * Format: date-time + * @deprecated + * @description Timestamp of the metric entry + */ + timestamp: string + /** + * Format: int64 + * @description Timestamp of the metric entry in Unix time (seconds since epoch) + */ + timestampUnix: number + /** + * Format: int32 + * @description Number of CPU cores + */ + cpuCount: number + /** + * Format: float + * @description CPU usage percentage + */ + cpuUsedPct: number + /** + * Format: int64 + * @description Memory used in bytes + */ + memUsed: number + /** + * Format: int64 + * @description Total memory in bytes + */ + memTotal: number + /** + * Format: int64 + * @description Disk used in bytes + */ + diskUsed: number + /** + * Format: int64 + * @description Total disk space in bytes + */ + diskTotal: number + } + Sandbox: { + /** @description Identifier of the template from which is the sandbox created */ + templateID: string + /** @description Identifier of the sandbox */ + sandboxID: string + /** @description Alias of the template */ + alias?: string + /** + * @deprecated + * @description Identifier of the client + */ + clientID: string + envdVersion: components['schemas']['EnvdVersion'] + /** @description Access token used for envd communication */ + envdAccessToken?: string + /** @description Token required for accessing sandbox via proxy. */ + trafficAccessToken?: string | null + /** @description Base domain where the sandbox traffic is accessible */ + domain?: string | null + } + SandboxDetail: { + /** @description Identifier of the template from which is the sandbox created */ + templateID: string + /** @description Alias of the template */ + alias?: string + /** @description Identifier of the sandbox */ + sandboxID: string + /** + * @deprecated + * @description Identifier of the client + */ + clientID: string + /** + * Format: date-time + * @description Time when the sandbox was started + */ + startedAt: string + /** + * Format: date-time + * @description Time when the sandbox will expire + */ + endAt: string + envdVersion: components['schemas']['EnvdVersion'] + /** @description Access token used for envd communication */ + envdAccessToken?: string + /** @description Base domain where the sandbox traffic is accessible */ + domain?: string | null + cpuCount: components['schemas']['CPUCount'] + memoryMB: components['schemas']['MemoryMB'] + diskSizeMB: components['schemas']['DiskSizeMB'] + metadata?: components['schemas']['SandboxMetadata'] + state: components['schemas']['SandboxState'] + } + ListedSandbox: { + /** @description Identifier of the template from which is the sandbox created */ + templateID: string + /** @description Alias of the template */ + alias?: string + /** @description Identifier of the sandbox */ + sandboxID: string + /** + * @deprecated + * @description Identifier of the client + */ + clientID: string + /** + * Format: date-time + * @description Time when the sandbox was started + */ + startedAt: string + /** + * Format: date-time + * @description Time when the sandbox will expire + */ + endAt: string + cpuCount: components['schemas']['CPUCount'] + memoryMB: components['schemas']['MemoryMB'] + diskSizeMB: components['schemas']['DiskSizeMB'] + metadata?: components['schemas']['SandboxMetadata'] + state: components['schemas']['SandboxState'] + envdVersion: components['schemas']['EnvdVersion'] + } + SandboxesWithMetrics: { + sandboxes: { + [key: string]: components['schemas']['SandboxMetric'] + } + } + NewSandbox: { + /** @description Identifier of the required template */ + templateID: string + /** + * Format: int32 + * @description Time to live for the sandbox in seconds. + * @default 15 + */ + timeout: number + /** + * @description Automatically pauses the sandbox after the timeout + * @default false + */ + autoPause: boolean + /** @description Secure all system communication with sandbox */ + secure?: boolean + /** @description Allow sandbox to access the internet. When set to false, it behaves the same as specifying denyOut to 0.0.0.0/0 in the network config. */ + allow_internet_access?: boolean + network?: components['schemas']['SandboxNetworkConfig'] + metadata?: components['schemas']['SandboxMetadata'] + envVars?: components['schemas']['EnvVars'] + mcp?: components['schemas']['Mcp'] + } + ResumedSandbox: { + /** + * Format: int32 + * @description Time to live for the sandbox in seconds. + * @default 15 + */ + timeout: number + /** + * @deprecated + * @description Automatically pauses the sandbox after the timeout + */ + autoPause?: boolean + } + ConnectSandbox: { + /** + * Format: int32 + * @description Timeout in seconds from the current time after which the sandbox should expire + */ + timeout: number + } + /** @description Team metric with timestamp */ + TeamMetric: { + /** + * Format: date-time + * @deprecated + * @description Timestamp of the metric entry + */ + timestamp: string + /** + * Format: int64 + * @description Timestamp of the metric entry in Unix time (seconds since epoch) + */ + timestampUnix: number + /** + * Format: int32 + * @description The number of concurrent sandboxes for the team + */ + concurrentSandboxes: number + /** + * Format: float + * @description Number of sandboxes started per second + */ + sandboxStartRate: number + } + /** @description Team metric with timestamp */ + MaxTeamMetric: { + /** + * Format: date-time + * @deprecated + * @description Timestamp of the metric entry + */ + timestamp: string + /** + * Format: int64 + * @description Timestamp of the metric entry in Unix time (seconds since epoch) + */ + timestampUnix: number + /** @description The maximum value of the requested metric in the given interval */ + value: number + } + AdminSandboxKillResult: { + /** @description Number of sandboxes successfully killed */ + killedCount: number + /** @description Number of sandboxes that failed to kill */ + failedCount: number + } + Template: { + /** @description Identifier of the template */ + templateID: string + /** @description Identifier of the last successful build for given template */ + buildID: string + cpuCount: components['schemas']['CPUCount'] + memoryMB: components['schemas']['MemoryMB'] + diskSizeMB: components['schemas']['DiskSizeMB'] + /** @description Whether the template is public or only accessible by the team */ + public: boolean + /** @description Aliases of the template */ + aliases: string[] + /** + * Format: date-time + * @description Time when the template was created + */ + createdAt: string + /** + * Format: date-time + * @description Time when the template was last updated + */ + updatedAt: string + createdBy: components['schemas']['TeamUser'] | null + /** + * Format: date-time + * @description Time when the template was last used + */ + lastSpawnedAt: string | null + /** + * Format: int64 + * @description Number of times the template was used + */ + spawnCount: number + /** + * Format: int32 + * @description Number of times the template was built + */ + buildCount: number + envdVersion: components['schemas']['EnvdVersion'] + buildStatus: components['schemas']['TemplateBuildStatus'] + } + TemplateRequestResponseV3: { + /** @description Identifier of the template */ + templateID: string + /** @description Identifier of the last successful build for given template */ + buildID: string + /** @description Whether the template is public or only accessible by the team */ + public: boolean + /** @description Aliases of the template */ + aliases: string[] + } + TemplateLegacy: { + /** @description Identifier of the template */ + templateID: string + /** @description Identifier of the last successful build for given template */ + buildID: string + cpuCount: components['schemas']['CPUCount'] + memoryMB: components['schemas']['MemoryMB'] + diskSizeMB: components['schemas']['DiskSizeMB'] + /** @description Whether the template is public or only accessible by the team */ + public: boolean + /** @description Aliases of the template */ + aliases: string[] + /** + * Format: date-time + * @description Time when the template was created + */ + createdAt: string + /** + * Format: date-time + * @description Time when the template was last updated + */ + updatedAt: string + createdBy: components['schemas']['TeamUser'] | null + /** + * Format: date-time + * @description Time when the template was last used + */ + lastSpawnedAt: string | null + /** + * Format: int64 + * @description Number of times the template was used + */ + spawnCount: number + /** + * Format: int32 + * @description Number of times the template was built + */ + buildCount: number + envdVersion: components['schemas']['EnvdVersion'] + } + TemplateBuild: { + /** + * Format: uuid + * @description Identifier of the build + */ + buildID: string + status: components['schemas']['TemplateBuildStatus'] + /** + * Format: date-time + * @description Time when the build was created + */ + createdAt: string + /** + * Format: date-time + * @description Time when the build was last updated + */ + updatedAt: string + /** + * Format: date-time + * @description Time when the build was finished + */ + finishedAt?: string + cpuCount: components['schemas']['CPUCount'] + memoryMB: components['schemas']['MemoryMB'] + diskSizeMB?: components['schemas']['DiskSizeMB'] + envdVersion?: components['schemas']['EnvdVersion'] + } + TemplateWithBuilds: { + /** @description Identifier of the template */ + templateID: string + /** @description Whether the template is public or only accessible by the team */ + public: boolean + /** @description Aliases of the template */ + aliases: string[] + /** + * Format: date-time + * @description Time when the template was created + */ + createdAt: string + /** + * Format: date-time + * @description Time when the template was last updated + */ + updatedAt: string + /** + * Format: date-time + * @description Time when the template was last used + */ + lastSpawnedAt: string | null + /** + * Format: int64 + * @description Number of times the template was used + */ + spawnCount: number + /** @description List of builds for the template */ + builds: components['schemas']['TemplateBuild'][] + } + TemplateBuildRequest: { + /** @description Alias of the template */ + alias?: string + /** @description Dockerfile for the template */ + dockerfile: string + /** @description Identifier of the team */ + teamID?: string + /** @description Start command to execute in the template after the build */ + startCmd?: string + /** @description Ready check command to execute in the template after the build */ + readyCmd?: string + cpuCount?: components['schemas']['CPUCount'] + memoryMB?: components['schemas']['MemoryMB'] + } + /** @description Step in the template build process */ + TemplateStep: { + /** @description Type of the step */ + type: string + /** + * @description Arguments for the step + * @default [] + */ + args: string[] + /** @description Hash of the files used in the step */ + filesHash?: string + /** + * @description Whether the step should be forced to run regardless of the cache + * @default false + */ + force: boolean + } + TemplateBuildRequestV3: { + /** @description Alias of the template */ + alias: string + /** @description Identifier of the team */ + teamID?: string + cpuCount?: components['schemas']['CPUCount'] + memoryMB?: components['schemas']['MemoryMB'] + } + TemplateBuildRequestV2: { + /** @description Alias of the template */ + alias: string + /** @description Identifier of the team */ + teamID?: string + cpuCount?: components['schemas']['CPUCount'] + memoryMB?: components['schemas']['MemoryMB'] + } + FromImageRegistry: + | components['schemas']['AWSRegistry'] + | components['schemas']['GCPRegistry'] + | components['schemas']['GeneralRegistry'] + AWSRegistry: { + /** + * @description Type of registry authentication (enum property replaced by openapi-typescript) + * @enum {string} + */ + type: 'aws' + /** @description AWS Access Key ID for ECR authentication */ + awsAccessKeyId: string + /** @description AWS Secret Access Key for ECR authentication */ + awsSecretAccessKey: string + /** @description AWS Region where the ECR registry is located */ + awsRegion: string + } + GCPRegistry: { + /** + * @description Type of registry authentication (enum property replaced by openapi-typescript) + * @enum {string} + */ + type: 'gcp' + /** @description Service Account JSON for GCP authentication */ + serviceAccountJson: string + } + GeneralRegistry: { + /** + * @description Type of registry authentication (enum property replaced by openapi-typescript) + * @enum {string} + */ + type: 'registry' + /** @description Username to use for the registry */ + username: string + /** @description Password to use for the registry */ + password: string + } + TemplateBuildStartV2: { + /** @description Image to use as a base for the template build */ + fromImage?: string + /** @description Template to use as a base for the template build */ + fromTemplate?: string + fromImageRegistry?: components['schemas']['FromImageRegistry'] + /** + * @description Whether the whole build should be forced to run regardless of the cache + * @default false + */ + force: boolean + /** + * @description List of steps to execute in the template build + * @default [] + */ + steps: components['schemas']['TemplateStep'][] + /** @description Start command to execute in the template after the build */ + startCmd?: string + /** @description Ready check command to execute in the template after the build */ + readyCmd?: string + } + TemplateBuildFileUpload: { + /** @description Whether the file is already present in the cache */ + present: boolean + /** @description Url where the file should be uploaded to */ + url?: string + } + /** + * @description State of the sandbox + * @enum {string} + */ + LogLevel: 'debug' | 'info' | 'warn' | 'error' + BuildLogEntry: { + /** + * Format: date-time + * @description Timestamp of the log entry + */ + timestamp: string + /** @description Log message content */ + message: string + level: components['schemas']['LogLevel'] + /** @description Step in the build process related to the log entry */ + step?: string + } + BuildStatusReason: { + /** @description Message with the status reason, currently reporting only for error status */ + message: string + /** @description Step that failed */ + step?: string + /** + * @description Log entries related to the status reason + * @default [] + */ + logEntries: components['schemas']['BuildLogEntry'][] + } + /** + * @description Status of the template build + * @enum {string} + */ + TemplateBuildStatus: 'building' | 'waiting' | 'ready' | 'error' + TemplateBuildInfo: { + /** + * @description Build logs + * @default [] + */ + logs: string[] + /** + * @description Build logs structured + * @default [] + */ + logEntries: components['schemas']['BuildLogEntry'][] + /** @description Identifier of the template */ + templateID: string + /** @description Identifier of the build */ + buildID: string + status: components['schemas']['TemplateBuildStatus'] + reason?: components['schemas']['BuildStatusReason'] + } + TemplateBuildLogsResponse: { + /** + * @description Build logs structured + * @default [] + */ + logs: components['schemas']['BuildLogEntry'][] + } + /** + * @description Direction of the logs that should be returned + * @enum {string} + */ + LogsDirection: 'forward' | 'backward' + /** + * @description Source of the logs that should be returned + * @enum {string} + */ + LogsSource: 'temporary' | 'persistent' + /** + * @description Status of the node + * @enum {string} + */ + NodeStatus: 'ready' | 'draining' | 'connecting' | 'unhealthy' + NodeStatusChange: { + /** + * Format: uuid + * @description Identifier of the cluster + */ + clusterID?: string + status: components['schemas']['NodeStatus'] + } + DiskMetrics: { + /** @description Mount point of the disk */ + mountPoint: string + /** @description Device name */ + device: string + /** @description Filesystem type (e.g., ext4, xfs) */ + filesystemType: string + /** + * Format: uint64 + * @description Used space in bytes + */ + usedBytes: number + /** + * Format: uint64 + * @description Total space in bytes + */ + totalBytes: number + } + /** @description Node metrics */ + NodeMetrics: { + /** + * Format: uint32 + * @description Number of allocated CPU cores + */ + allocatedCPU: number + /** + * Format: uint32 + * @description Node CPU usage percentage + */ + cpuPercent: number + /** + * Format: uint32 + * @description Total number of CPU cores on the node + */ + cpuCount: number + /** + * Format: uint64 + * @description Amount of allocated memory in bytes + */ + allocatedMemoryBytes: number + /** + * Format: uint64 + * @description Node memory used in bytes + */ + memoryUsedBytes: number + /** + * Format: uint64 + * @description Total node memory in bytes + */ + memoryTotalBytes: number + /** @description Detailed metrics for each disk/mount point */ + disks: components['schemas']['DiskMetrics'][] + } + MachineInfo: { + /** @description CPU family of the node */ + cpuFamily: string + /** @description CPU model of the node */ + cpuModel: string + /** @description CPU model name of the node */ + cpuModelName: string + /** @description CPU architecture of the node */ + cpuArchitecture: string + } + Node: { + /** @description Version of the orchestrator */ + version: string + /** @description Commit of the orchestrator */ + commit: string + /** + * @deprecated + * @description Identifier of the nomad node + */ + nodeID: string + /** @description Identifier of the node */ + id: string + /** @description Service instance identifier of the node */ + serviceInstanceID: string + /** @description Identifier of the cluster */ + clusterID: string + machineInfo: components['schemas']['MachineInfo'] + status: components['schemas']['NodeStatus'] + /** + * Format: uint32 + * @description Number of sandboxes running on the node + */ + sandboxCount: number + metrics: components['schemas']['NodeMetrics'] + /** + * Format: uint64 + * @description Number of sandbox create successes + */ + createSuccesses: number + /** + * Format: uint64 + * @description Number of sandbox create fails + */ + createFails: number + /** + * Format: int + * @description Number of starting Sandboxes + */ + sandboxStartingCount: number + } + NodeDetail: { + /** @description Identifier of the cluster */ + clusterID: string + /** @description Version of the orchestrator */ + version: string + /** @description Commit of the orchestrator */ + commit: string + /** @description Identifier of the node */ + id: string + /** @description Service instance identifier of the node */ + serviceInstanceID: string + /** + * @deprecated + * @description Identifier of the nomad node + */ + nodeID: string + machineInfo: components['schemas']['MachineInfo'] + status: components['schemas']['NodeStatus'] + /** @description List of sandboxes running on the node */ + sandboxes: components['schemas']['ListedSandbox'][] + metrics: components['schemas']['NodeMetrics'] + /** @description List of cached builds id on the node */ + cachedBuilds: string[] + /** + * Format: uint64 + * @description Number of sandbox create successes + */ + createSuccesses: number + /** + * Format: uint64 + * @description Number of sandbox create fails + */ + createFails: number + } + CreatedAccessToken: { + /** + * Format: uuid + * @description Identifier of the access token + */ + id: string + /** @description Name of the access token */ + name: string + /** @description The fully created access token */ + token: string + mask: components['schemas']['IdentifierMaskingDetails'] + /** + * Format: date-time + * @description Timestamp of access token creation + */ + createdAt: string + } + NewAccessToken: { + /** @description Name of the access token */ + name: string + } + TeamAPIKey: { + /** + * Format: uuid + * @description Identifier of the API key + */ + id: string + /** @description Name of the API key */ + name: string + mask: components['schemas']['IdentifierMaskingDetails'] + /** + * Format: date-time + * @description Timestamp of API key creation + */ + createdAt: string + createdBy?: components['schemas']['TeamUser'] | null + /** + * Format: date-time + * @description Last time this API key was used + */ + lastUsed?: string | null + } + CreatedTeamAPIKey: { + /** + * Format: uuid + * @description Identifier of the API key + */ + id: string + /** @description Raw value of the API key */ + key: string + mask: components['schemas']['IdentifierMaskingDetails'] + /** @description Name of the API key */ + name: string + /** + * Format: date-time + * @description Timestamp of API key creation + */ + createdAt: string + createdBy?: components['schemas']['TeamUser'] | null + /** + * Format: date-time + * @description Last time this API key was used + */ + lastUsed?: string | null + } + NewTeamAPIKey: { + /** @description Name of the API key */ + name: string + } + UpdateTeamAPIKey: { + /** @description New name for the API key */ + name: string + } + Error: { + /** + * Format: int32 + * @description Error code + */ + code: number + /** @description Error */ + message: string + } + IdentifierMaskingDetails: { + /** @description Prefix that identifies the token or key type */ + prefix: string + /** @description Length of the token or key */ + valueLength: number + /** @description Prefix used in masked version of the token or key */ + maskedValuePrefix: string + /** @description Suffix used in masked version of the token or key */ + maskedValueSuffix: string + } + } + responses: { + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Error'] + } + } + /** @description Authentication error */ + 401: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Error'] + } + } + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Error'] + } + } + /** @description Not found */ + 404: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Error'] + } + } + /** @description Conflict */ + 409: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Error'] + } + } + /** @description Server error */ + 500: { + headers: { + [name: string]: unknown + } + content: { + 'application/json': components['schemas']['Error'] + } + } + } + parameters: { + templateID: string + buildID: string + sandboxID: string + teamID: string + nodeID: string + apiKeyID: string + accessTokenID: string + /** @description Maximum number of items to return per page */ + paginationLimit: number + /** @description Cursor to start the list from */ + paginationNextToken: string + } + requestBodies: never + headers: never + pathItems: never } -export type $defs = Record; -export type operations = Record; +export type $defs = Record +export type operations = Record diff --git a/src/ui/chart-placeholder.tsx b/src/ui/chart-placeholder.tsx index 54d4e2bc2..7581b8340 100644 --- a/src/ui/chart-placeholder.tsx +++ b/src/ui/chart-placeholder.tsx @@ -1,4 +1,4 @@ -"use client" +'use client' import { cn } from '@/lib/utils' import { diff --git a/src/ui/time-input.tsx b/src/ui/time-input.tsx index 7993fcc32..0298ca367 100644 --- a/src/ui/time-input.tsx +++ b/src/ui/time-input.tsx @@ -183,85 +183,85 @@ export const TimeInput = memo(function TimeInput({ {!hideTime && ( -
- setDisplayTime(e.target.value)} - onBlur={() => onTimeChange(displayTime)} - placeholder="HH:MM:SS" - disabled={disabled} - className={cn( - 'pr-10 h-10 w-full bg-transparent', - 'placeholder:prose-label' - )} - /> -
- - {getTimezoneIdentifier()} - +
+ setDisplayTime(e.target.value)} + onBlur={() => onTimeChange(displayTime)} + placeholder="HH:MM:SS" + disabled={disabled} + className={cn( + 'pr-10 h-10 w-full bg-transparent', + 'placeholder:prose-label' + )} + /> +
+ + {getTimezoneIdentifier()} + - - - -
-
- -
-
- Hours - handleTimeChange('hours', value)} - min={0} - max={23} - step={1} - disabled={disabled} - inputClassName="h-8 w-11 text-center border-r-0" - buttonClassName="h-[1rem]" - /> -
-
- Minutes - handleTimeChange('minutes', value)} - min={0} - max={59} - step={1} - disabled={disabled} - inputClassName="h-8 w-11 text-center border-r-0" - buttonClassName="h-[1rem]" - /> -
-
- Seconds - handleTimeChange('seconds', value)} - min={0} - max={59} - step={1} - disabled={disabled} - inputClassName="h-8 w-11 text-center" - buttonClassName="h-[1rem]" - /> + + +
-
- + +
+
+ Hours + handleTimeChange('hours', value)} + min={0} + max={23} + step={1} + disabled={disabled} + inputClassName="h-8 w-11 text-center border-r-0" + buttonClassName="h-[1rem]" + /> +
+
+ Minutes + handleTimeChange('minutes', value)} + min={0} + max={59} + step={1} + disabled={disabled} + inputClassName="h-8 w-11 text-center border-r-0" + buttonClassName="h-[1rem]" + /> +
+
+ Seconds + handleTimeChange('seconds', value)} + min={0} + max={59} + step={1} + disabled={disabled} + inputClassName="h-8 w-11 text-center" + buttonClassName="h-[1rem]" + /> +
+
+
+ )}
)